]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
start 2.6.27.5 review cycle
authorGreg Kroah-Hartman <gregkh@suse.de>
Wed, 5 Nov 2008 00:26:53 +0000 (16:26 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 5 Nov 2008 00:26:53 +0000 (16:26 -0800)
59 files changed:
review-2.6.27/0001-sparc64-Fix-race-in-arch-sparc64-kernel-trampoline.patch [moved from queue-2.6.27/0001-sparc64-Fix-race-in-arch-sparc64-kernel-trampoline.patch with 100% similarity]
review-2.6.27/0001-syncookies-fix-inclusion-of-tcp-options-in-syn-ack.patch [moved from queue-2.6.27/0001-syncookies-fix-inclusion-of-tcp-options-in-syn-ack.patch with 100% similarity]
review-2.6.27/0002-math-emu-Fix-signalling-of-underflow-and-inexact-wh.patch [moved from queue-2.6.27/0002-math-emu-Fix-signalling-of-underflow-and-inexact-wh.patch with 100% similarity]
review-2.6.27/0002-tcp-Restore-ordering-of-TCP-options-for-the-sake-of.patch [moved from queue-2.6.27/0002-tcp-Restore-ordering-of-TCP-options-for-the-sake-of.patch with 100% similarity]
review-2.6.27/0003-tcpv6-fix-option-space-offsets-with-md5.patch [moved from queue-2.6.27/0003-tcpv6-fix-option-space-offsets-with-md5.patch with 100% similarity]
review-2.6.27/0004-pkt_sched-sch_generic-Fix-oops-in-sch_teql.patch [moved from queue-2.6.27/0004-pkt_sched-sch_generic-Fix-oops-in-sch_teql.patch with 100% similarity]
review-2.6.27/acpi-always-report-a-sync-event-after-a-lid-state-change.patch [moved from queue-2.6.27/acpi-always-report-a-sync-event-after-a-lid-state-change.patch with 100% similarity]
review-2.6.27/acpi-clear-wak_sts-on-resume.patch [moved from queue-2.6.27/acpi-clear-wak_sts-on-resume.patch with 100% similarity]
review-2.6.27/acpi-ec-check-for-ibf-0-periodically-if-not-in-gpe-mode.patch [moved from queue-2.6.27/acpi-ec-check-for-ibf-0-periodically-if-not-in-gpe-mode.patch with 100% similarity]
review-2.6.27/acpi-ec-do-transaction-from-interrupt-context.patch [moved from queue-2.6.27/acpi-ec-do-transaction-from-interrupt-context.patch with 100% similarity]
review-2.6.27/acpi-ec-rename-some-variables.patch [moved from queue-2.6.27/acpi-ec-rename-some-variables.patch with 100% similarity]
review-2.6.27/acpi-ingore-the-reset_reg_sup-bit-when-using-acpi-reset-mechanism.patch [moved from queue-2.6.27/acpi-ingore-the-reset_reg_sup-bit-when-using-acpi-reset-mechanism.patch with 100% similarity]
review-2.6.27/agp-fix-stolen-memory-counting-on-g4x.patch [moved from queue-2.6.27/agp-fix-stolen-memory-counting-on-g4x.patch with 100% similarity]
review-2.6.27/alsa-hda-add-reboot-notifier.patch [moved from queue-2.6.27/alsa-hda-add-reboot-notifier.patch with 100% similarity]
review-2.6.27/alsa-use-correct-lock-in-snd_ctl_dev_disconnect.patch [moved from queue-2.6.27/alsa-use-correct-lock-in-snd_ctl_dev_disconnect.patch with 100% similarity]
review-2.6.27/atl1-fix-vlan-tag-regression.patch [moved from queue-2.6.27/atl1-fix-vlan-tag-regression.patch with 100% similarity]
review-2.6.27/bonding-fix-panic-when-taking-bond-interface-down-before-removing-module.patch [moved from queue-2.6.27/bonding-fix-panic-when-taking-bond-interface-down-before-removing-module.patch with 100% similarity]
review-2.6.27/dvb-s5h1411-bugfix-setting-serial-or-parallel-mode-could-destroy-bits.patch [moved from queue-2.6.27/dvb-s5h1411-bugfix-setting-serial-or-parallel-mode-could-destroy-bits.patch with 100% similarity]
review-2.6.27/dvb-s5h1411-perform-s5h1411-soft-reset-after-tuning.patch [moved from queue-2.6.27/dvb-s5h1411-perform-s5h1411-soft-reset-after-tuning.patch with 100% similarity]
review-2.6.27/dvb-s5h1411-power-down-s5h1411-when-not-in-use.patch [moved from queue-2.6.27/dvb-s5h1411-power-down-s5h1411-when-not-in-use.patch with 100% similarity]
review-2.6.27/file-caps-always-start-with-clear-bprm-caps_.patch [moved from queue-2.6.27/file-caps-always-start-with-clear-bprm-caps_.patch with 100% similarity]
review-2.6.27/firewire-fix-ioctl-return-code.patch [moved from queue-2.6.27/firewire-fix-ioctl-return-code.patch with 100% similarity]
review-2.6.27/firewire-fix-setting-tag-and-sy-in-iso-transmission.patch [moved from queue-2.6.27/firewire-fix-setting-tag-and-sy-in-iso-transmission.patch with 100% similarity]
review-2.6.27/firewire-fix-struct-fw_node-memory-leak.patch [moved from queue-2.6.27/firewire-fix-struct-fw_node-memory-leak.patch with 100% similarity]
review-2.6.27/firewire-fw-sbp2-delay-first-login-to-avoid-retries.patch [moved from queue-2.6.27/firewire-fw-sbp2-delay-first-login-to-avoid-retries.patch with 100% similarity]
review-2.6.27/firewire-fw-sbp2-fix-races.patch [moved from queue-2.6.27/firewire-fw-sbp2-fix-races.patch with 100% similarity]
review-2.6.27/firewire-survive-more-than-256-bus-resets.patch [moved from queue-2.6.27/firewire-survive-more-than-256-bus-resets.patch with 100% similarity]
review-2.6.27/hfsplus-check-read_mapping_page-return-value.patch [moved from queue-2.6.27/hfsplus-check-read_mapping_page-return-value.patch with 100% similarity]
review-2.6.27/hfsplus-fix-buffer-overflow-with-a-corrupted-image.patch [moved from queue-2.6.27/hfsplus-fix-buffer-overflow-with-a-corrupted-image.patch with 100% similarity]
review-2.6.27/i2c-the-i2c-mailing-list-is-moving.patch [moved from queue-2.6.27/i2c-the-i2c-mailing-list-is-moving.patch with 100% similarity]
review-2.6.27/input-atkbd-expand-latitude-s-force-release-quirk-to-other-dells.patch [moved from queue-2.6.27/input-atkbd-expand-latitude-s-force-release-quirk-to-other-dells.patch with 100% similarity]
review-2.6.27/ipmi-add-module_alias-to-load-ipmi_devintf-with-ipmi_si.patch [moved from queue-2.6.27/ipmi-add-module_alias-to-load-ipmi_devintf-with-ipmi_si.patch with 100% similarity]
review-2.6.27/kbuild-mkspec-fix-build-rpm.patch [moved from queue-2.6.27/kbuild-mkspec-fix-build-rpm.patch with 100% similarity]
review-2.6.27/libata-fix-lba48-on-pata_it821x-raid-volumes.patch [moved from queue-2.6.27/libata-fix-lba48-on-pata_it821x-raid-volumes.patch with 100% similarity]
review-2.6.27/libata-initialize-port_task-when-config_ata_sff.patch [moved from queue-2.6.27/libata-initialize-port_task-when-config_ata_sff.patch with 100% similarity]
review-2.6.27/libertas-fix-buffer-overrun.patch [moved from queue-2.6.27/libertas-fix-buffer-overrun.patch with 100% similarity]
review-2.6.27/mbox [new file with mode: 0644]
review-2.6.27/pci-fix-64-vbit-prefetchable-memory-resource-bars.patch [moved from queue-2.6.27/pci-fix-64-vbit-prefetchable-memory-resource-bars.patch with 100% similarity]
review-2.6.27/powerpc-don-t-use-a-16g-page-if-beyond-mem-limits.patch [moved from queue-2.6.27/powerpc-don-t-use-a-16g-page-if-beyond-mem-limits.patch with 100% similarity]
review-2.6.27/powerpc-fix-i2c-on-ppc-linkstation-kurobox-machines.patch [moved from queue-2.6.27/powerpc-fix-i2c-on-ppc-linkstation-kurobox-machines.patch with 100% similarity]
review-2.6.27/powerpc-numa-make-memory-reserve-code-more-robust.patch [moved from queue-2.6.27/powerpc-numa-make-memory-reserve-code-more-robust.patch with 100% similarity]
review-2.6.27/powerpc-reserve-in-bootmem-lmb-reserved-regions-that-cross-numa-nodes.patch [moved from queue-2.6.27/powerpc-reserve-in-bootmem-lmb-reserved-regions-that-cross-numa-nodes.patch with 100% similarity]
review-2.6.27/revert-hid-invert-hwheel-mappings-for-some-logitech-mice.patch [moved from queue-2.6.27/revert-hid-invert-hwheel-mappings-for-some-logitech-mice.patch with 100% similarity]
review-2.6.27/rtc-cmos-look-for-pnp-rtc-first-then-for-platform-rtc.patch [moved from queue-2.6.27/rtc-cmos-look-for-pnp-rtc-first-then-for-platform-rtc.patch with 100% similarity]
review-2.6.27/s390-fix-sysdev-class-file-creation.patch [moved from queue-2.6.27/s390-fix-sysdev-class-file-creation.patch with 100% similarity]
review-2.6.27/sata_nv-fix-generic-nf2-3-detection-regression.patch [moved from queue-2.6.27/sata_nv-fix-generic-nf2-3-detection-regression.patch with 100% similarity]
review-2.6.27/sata_promise-add-ata-engine-reset-to-reset-ops.patch [moved from queue-2.6.27/sata_promise-add-ata-engine-reset-to-reset-ops.patch with 100% similarity]
review-2.6.27/sched-disable-the-hrtick-for-now.patch [moved from queue-2.6.27/sched-disable-the-hrtick-for-now.patch with 100% similarity]
review-2.6.27/sched_clock-prevent-scd-clock-from-moving-backwards.patch [moved from queue-2.6.27/sched_clock-prevent-scd-clock-from-moving-backwards.patch with 100% similarity]
review-2.6.27/scsi-sd-fix-handling-of-no_sense-check-condition.patch [moved from queue-2.6.27/scsi-sd-fix-handling-of-no_sense-check-condition.patch with 100% similarity]
review-2.6.27/scx200_i2c-add-missing-class-parameter.patch [moved from queue-2.6.27/scx200_i2c-add-missing-class-parameter.patch with 100% similarity]
review-2.6.27/series [moved from queue-2.6.27/series with 100% similarity]
review-2.6.27/sysfs-fix-return-values-for-sysdev_store_-ulong-int.patch [moved from queue-2.6.27/sysfs-fix-return-values-for-sysdev_store_-ulong-int.patch with 100% similarity]
review-2.6.27/usb-fix-crash-when-urbs-are-unlinked-after-the-device-is-gone.patch [moved from queue-2.6.27/usb-fix-crash-when-urbs-are-unlinked-after-the-device-is-gone.patch with 100% similarity]
review-2.6.27/usb-storage-avoid-i-o-errors-when-issuing-scsi-ioctls-to-jmicron-usb-ata-bridge.patch [moved from queue-2.6.27/usb-storage-avoid-i-o-errors-when-issuing-scsi-ioctls-to-jmicron-usb-ata-bridge.patch with 100% similarity]
review-2.6.27/v4l-pvrusb2-keep-mpeg-ptss-from-drifting-away.patch [moved from queue-2.6.27/v4l-pvrusb2-keep-mpeg-ptss-from-drifting-away.patch with 100% similarity]
review-2.6.27/x86-avoid-dereferencing-beyond-stack-thread_size.patch [moved from queue-2.6.27/x86-avoid-dereferencing-beyond-stack-thread_size.patch with 100% similarity]
review-2.6.27/x86-fix-dev-mem-mmap-breakage-when-pat-is-disabled.patch [moved from queue-2.6.27/x86-fix-dev-mem-mmap-breakage-when-pat-is-disabled.patch with 100% similarity]
review-2.6.27/x86-register-a-platform-rtc-device-if-pnp-doesn-t-describe-it.patch [moved from queue-2.6.27/x86-register-a-platform-rtc-device-if-pnp-doesn-t-describe-it.patch with 100% similarity]

diff --git a/review-2.6.27/mbox b/review-2.6.27/mbox
new file mode 100644 (file)
index 0000000..84d926e
--- /dev/null
@@ -0,0 +1,6425 @@
+From gregkh@mini.kroah.org Tue Nov  4 15:23:17 2008
+Message-Id: <20081104232317.715134241@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:21:45 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Eric Anholt <eric@anholt.net>,
+ Dave Airlie <airlied@redhat.com>
+Subject: [patch 01/57] agp: Fix stolen memory counting on G4X.
+Content-Disposition: inline; filename=agp-fix-stolen-memory-counting-on-g4x.patch
+Content-Length: 2325
+Lines: 58
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Eric Anholt <eric@anholt.net>
+
+commit 82e14a6215cbc9804ecc35281e973c6c8ce22fe7 upstream
+
+On the GM45, the amount of stolen memory mapped to the GTT was underestimated,
+even though we had 508KB more available since the GTT doesn't take from
+stolen memory. On the non-GM45 G4X, we overestimated how much stolen was
+mapped to the GTT by 4KB, resulting in GPU page faults when that page was
+accessed.
+
+This update requires a corresponding update to xf86-video-intel to work
+correctly.
+
+Signed-off-by: Eric Anholt <eric@anholt.net>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/agp/intel-agp.c |   12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+--- a/drivers/char/agp/intel-agp.c
++++ b/drivers/char/agp/intel-agp.c
+@@ -54,8 +54,7 @@
+                agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965Q_HB || \
+                agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_HB || \
+                agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GM_HB || \
+-               agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GME_HB || \
+-               agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_GM45_HB)
++               agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GME_HB)
+ #define IS_G33 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G33_HB || \
+               agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_Q35_HB || \
+@@ -63,7 +62,8 @@
+ #define IS_G4X (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGD_E_HB || \
+               agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_Q45_HB || \
+-              agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G45_HB)
++              agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G45_HB || \
++              agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_GM45_HB)
+ extern int agp_memory_reserved;
+@@ -525,8 +525,10 @@ static void intel_i830_init_gtt_entries(
+               size += 4;
+       } else if (IS_G4X) {
+               /* On 4 series hardware, GTT stolen is separate from graphics
+-               * stolen, ignore it in stolen gtt entries counting */
+-              size = 0;
++               * stolen, ignore it in stolen gtt entries counting.  However,
++               * 4KB of the stolen memory doesn't get mapped to the GTT.
++               */
++              size = 4;
+       } else {
+               /* On previous hardware, the GTT size was just what was
+                * required to map the aperture.
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:18 2008
+Message-Id: <20081104232317.891267458@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:21:46 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jamie Wellnitz <Jamie.Wellnitz@emulex.com>,
+ James Bottomley <James.Bottomley@HansenPartnership.com>
+Subject: [patch 02/57] SCSI: sd: Fix handling of NO_SENSE check condition
+Content-Disposition: inline; filename=scsi-sd-fix-handling-of-no_sense-check-condition.patch
+Content-Length: 1842
+Lines: 51
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jamie Wellnitz <Jamie.Wellnitz@emulex.com>
+
+commit 10dab22664914505dcb804d9ad09cad6bc94d349 upstream
+
+The current handling of NO_SENSE check condition is the same as
+RECOVERED_ERROR, and assumes that in both cases, the I/O was fully
+transferred.
+
+We have seen cases of arrays returning with NO_SENSE (no error), but
+the I/O was not completely transferred, thus residual set.  Thus,
+rather than return good_bytes as the entire transfer, set good_bytes
+to 0, so that the midlayer then applies the residual in calculating
+the transfer, and for sd, will fail the I/O and fall into a retry
+path.
+
+Signed-off-by: Jamie Wellnitz <Jamie.Wellnitz@emulex.com>
+Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/scsi/sd.c |   10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+--- a/drivers/scsi/sd.c
++++ b/drivers/scsi/sd.c
+@@ -1047,7 +1047,6 @@ static int sd_done(struct scsi_cmnd *SCp
+               good_bytes = sd_completed_bytes(SCpnt);
+               break;
+       case RECOVERED_ERROR:
+-      case NO_SENSE:
+               /* Inform the user, but make sure that it's not treated
+                * as a hard error.
+                */
+@@ -1056,6 +1055,15 @@ static int sd_done(struct scsi_cmnd *SCp
+               memset(SCpnt->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
+               good_bytes = scsi_bufflen(SCpnt);
+               break;
++      case NO_SENSE:
++              /* This indicates a false check condition, so ignore it.  An
++               * unknown amount of data was transferred so treat it as an
++               * error.
++               */
++              scsi_print_sense("sd", SCpnt);
++              SCpnt->result = 0;
++              memset(SCpnt->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
++              break;
+       case ABORTED_COMMAND:
+               if (sshdr.asc == 0x10) { /* DIF: Disk detected corruption */
+                       scsi_print_result(SCpnt);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:18 2008
+Message-Id: <20081104232318.060575154@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:21:47 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ jejb@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Heiko Carstens <heiko.carstens@de.ibm.com>,
+ Martin Schwidefsky <schwidefsky@de.ibm.com>
+Subject: [patch 03/57] S390: Fix sysdev class file creation.
+Content-Disposition: inline; filename=s390-fix-sysdev-class-file-creation.patch
+Content-Length: 2909
+Lines: 88
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Heiko Carstens <heiko.carstens@de.ibm.com>
+
+commit da5aae7036692fa8d03da1b705c76fd750ed9e38 upstream
+
+Use sysdev_class_create_file() to create create sysdev class attributes
+instead of sysfs_create_file(). Using sysfs_create_file() wasn't a very
+good idea since the show and store functions have a different amount of
+parameters for sysfs files and sysdev class files.
+In particular the pointer to the buffer is the last argument and
+therefore accesses to random memory regions happened.
+Still worked surprisingly well until we got a kernel panic.
+
+Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
+Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/s390/kernel/smp.c |   24 +++++++++---------------
+ 1 file changed, 9 insertions(+), 15 deletions(-)
+
+--- a/arch/s390/kernel/smp.c
++++ b/arch/s390/kernel/smp.c
+@@ -1117,9 +1117,7 @@ out:
+       return rc;
+ }
+-static ssize_t __ref rescan_store(struct sys_device *dev,
+-                                struct sysdev_attribute *attr,
+-                                const char *buf,
++static ssize_t __ref rescan_store(struct sysdev_class *class, const char *buf,
+                                 size_t count)
+ {
+       int rc;
+@@ -1127,12 +1125,10 @@ static ssize_t __ref rescan_store(struct
+       rc = smp_rescan_cpus();
+       return rc ? rc : count;
+ }
+-static SYSDEV_ATTR(rescan, 0200, NULL, rescan_store);
++static SYSDEV_CLASS_ATTR(rescan, 0200, NULL, rescan_store);
+ #endif /* CONFIG_HOTPLUG_CPU */
+-static ssize_t dispatching_show(struct sys_device *dev,
+-                              struct sysdev_attribute *attr,
+-                              char *buf)
++static ssize_t dispatching_show(struct sysdev_class *class, char *buf)
+ {
+       ssize_t count;
+@@ -1142,9 +1138,8 @@ static ssize_t dispatching_show(struct s
+       return count;
+ }
+-static ssize_t dispatching_store(struct sys_device *dev,
+-                               struct sysdev_attribute *attr,
+-                               const char *buf, size_t count)
++static ssize_t dispatching_store(struct sysdev_class *dev, const char *buf,
++                               size_t count)
+ {
+       int val, rc;
+       char delim;
+@@ -1166,7 +1161,8 @@ out:
+       put_online_cpus();
+       return rc ? rc : count;
+ }
+-static SYSDEV_ATTR(dispatching, 0644, dispatching_show, dispatching_store);
++static SYSDEV_CLASS_ATTR(dispatching, 0644, dispatching_show,
++                       dispatching_store);
+ static int __init topology_init(void)
+ {
+@@ -1176,13 +1172,11 @@ static int __init topology_init(void)
+       register_cpu_notifier(&smp_cpu_nb);
+ #ifdef CONFIG_HOTPLUG_CPU
+-      rc = sysfs_create_file(&cpu_sysdev_class.kset.kobj,
+-                             &attr_rescan.attr);
++      rc = sysdev_class_create_file(&cpu_sysdev_class, &attr_rescan);
+       if (rc)
+               return rc;
+ #endif
+-      rc = sysfs_create_file(&cpu_sysdev_class.kset.kobj,
+-                             &attr_dispatching.attr);
++      rc = sysdev_class_create_file(&cpu_sysdev_class, &attr_dispatching);
+       if (rc)
+               return rc;
+       for_each_present_cpu(cpu) {
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:18 2008
+Message-Id: <20081104232318.234852040@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:21:48 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ jejb@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Andi Kleen <ak@linux.intel.com>
+Subject: [patch 04/57] sysfs: Fix return values for sysdev_store_{ulong, int}
+Content-Disposition: inline; filename=sysfs-fix-return-values-for-sysdev_store_-ulong-int.patch
+Content-Length: 1234
+Lines: 42
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Andi Kleen <andi@firstfloor.org>
+
+commit 4e318d7c6c9dd5cdae48bcf61558bbc0c09b12ac upstream
+
+SYSFS: Fix return values for sysdev_store_{ulong,int}
+
+Always return the full size instead of the consumed
+length of the string in sysdev_store_{ulong,int}
+
+This avoids EINVAL errors in some echo versions.
+
+Signed-off-by: Andi Kleen <ak@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/base/sys.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/drivers/base/sys.c
++++ b/drivers/base/sys.c
+@@ -488,7 +488,8 @@ ssize_t sysdev_store_ulong(struct sys_de
+       if (end == buf)
+               return -EINVAL;
+       *(unsigned long *)(ea->var) = new;
+-      return end - buf;
++      /* Always return full write size even if we didn't consume all */
++      return size;
+ }
+ EXPORT_SYMBOL_GPL(sysdev_store_ulong);
+@@ -511,7 +512,8 @@ ssize_t sysdev_store_int(struct sys_devi
+       if (end == buf || new > INT_MAX || new < INT_MIN)
+               return -EINVAL;
+       *(int *)(ea->var) = new;
+-      return end - buf;
++      /* Always return full write size even if we didn't consume all */
++      return size;
+ }
+ EXPORT_SYMBOL_GPL(sysdev_store_int);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:18 2008
+Message-Id: <20081104232318.398108411@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:21:49 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ jejb@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Scott James Remnant <scott@ubuntu.com>,
+ Tim Gardner <tcanonical@tpi.com>,
+ Corey Minyard <minyard@acm.org>
+Subject: [patch 05/57] ipmi: add MODULE_ALIAS to load ipmi_devintf with ipmi_si
+Content-Disposition: inline; filename=ipmi-add-module_alias-to-load-ipmi_devintf-with-ipmi_si.patch
+Content-Length: 1192
+Lines: 31
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Scott James Remnant <scott@canonical.com>
+
+commit 6c89161b10f5771ee0b51ada0fce0e8835e72ade upstream
+
+The ipmi_devintf module contains the userspace interface for IPMI devices,
+yet will not be loaded automatically with a system interface handler
+driver.
+
+Add a MODULE_ALIAS for the "platform:ipmi_si" MODALIAS exported by the
+ipmi_si driver, so that userspace knows of the recommendation.
+
+Signed-off-by: Scott James Remnant <scott@ubuntu.com>
+Cc: Tim Gardner <tcanonical@tpi.com>
+Cc: Corey Minyard <minyard@acm.org>
+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/char/ipmi/ipmi_devintf.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/char/ipmi/ipmi_devintf.c
++++ b/drivers/char/ipmi/ipmi_devintf.c
+@@ -957,3 +957,4 @@ module_exit(cleanup_ipmi);
+ MODULE_LICENSE("GPL");
+ MODULE_AUTHOR("Corey Minyard <minyard@mvista.com>");
+ MODULE_DESCRIPTION("Linux device interface for the IPMI message handler.");
++MODULE_ALIAS("platform:ipmi_si");
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:18 2008
+Message-Id: <20081104232318.572456971@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:21:50 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ jejb@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Alan Stern <stern@rowland.harvard.edu>
+Subject: [patch 06/57] USB: fix crash when URBs are unlinked after the device is gone
+Content-Disposition: inline; filename=usb-fix-crash-when-urbs-are-unlinked-after-the-device-is-gone.patch
+Content-Length: 5889
+Lines: 157
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit cde217a556ec552d28ac9e136c5a94684a69ae94 upstream
+
+This patch (as1151) protects usbcore against drivers that try to
+unlink an URB after the URB's device or bus have been removed.  The
+core does not currently check for this, and certain drivers can cause
+a crash if they are running while an HCD is unloaded.
+
+Certainly it would be best to fix the guilty drivers.  But a little
+defensive programming doesn't hurt, especially since it appears that
+quite a few drivers need to be fixed.
+
+The patch prevents the problem by grabbing a reference to the device
+while an unlink is in progress and using a new spinlock to synchronize
+unlinks with device removal.  (There's no need to acquire a reference
+to the bus as well, since the device structure itself keeps a
+reference to the bus.)  In addition, the kerneldoc is updated to
+indicate that URBs should not be unlinked after the disconnect method
+returns.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/core/hcd.c |   35 ++++++++++++++++++++++++++++++++---
+ drivers/usb/core/hcd.h |    1 +
+ drivers/usb/core/hub.c |    1 +
+ drivers/usb/core/urb.c |   15 +++++++++++++++
+ 4 files changed, 49 insertions(+), 3 deletions(-)
+
+--- a/drivers/usb/core/hcd.c
++++ b/drivers/usb/core/hcd.c
+@@ -106,6 +106,9 @@ static DEFINE_SPINLOCK(hcd_root_hub_lock
+ /* used when updating an endpoint's URB list */
+ static DEFINE_SPINLOCK(hcd_urb_list_lock);
++/* used to protect against unlinking URBs after the device is gone */
++static DEFINE_SPINLOCK(hcd_urb_unlink_lock);
++
+ /* wait queue for synchronous unlinks */
+ DECLARE_WAIT_QUEUE_HEAD(usb_kill_urb_queue);
+@@ -1377,10 +1380,25 @@ static int unlink1(struct usb_hcd *hcd, 
+ int usb_hcd_unlink_urb (struct urb *urb, int status)
+ {
+       struct usb_hcd          *hcd;
+-      int                     retval;
++      int                     retval = -EIDRM;
++      unsigned long           flags;
+-      hcd = bus_to_hcd(urb->dev->bus);
+-      retval = unlink1(hcd, urb, status);
++      /* Prevent the device and bus from going away while
++       * the unlink is carried out.  If they are already gone
++       * then urb->use_count must be 0, since disconnected
++       * devices can't have any active URBs.
++       */
++      spin_lock_irqsave(&hcd_urb_unlink_lock, flags);
++      if (atomic_read(&urb->use_count) > 0) {
++              retval = 0;
++              usb_get_dev(urb->dev);
++      }
++      spin_unlock_irqrestore(&hcd_urb_unlink_lock, flags);
++      if (retval == 0) {
++              hcd = bus_to_hcd(urb->dev->bus);
++              retval = unlink1(hcd, urb, status);
++              usb_put_dev(urb->dev);
++      }
+       if (retval == 0)
+               retval = -EINPROGRESS;
+@@ -1529,6 +1547,17 @@ void usb_hcd_disable_endpoint(struct usb
+               hcd->driver->endpoint_disable(hcd, ep);
+ }
++/* Protect against drivers that try to unlink URBs after the device
++ * is gone, by waiting until all unlinks for @udev are finished.
++ * Since we don't currently track URBs by device, simply wait until
++ * nothing is running in the locked region of usb_hcd_unlink_urb().
++ */
++void usb_hcd_synchronize_unlinks(struct usb_device *udev)
++{
++      spin_lock_irq(&hcd_urb_unlink_lock);
++      spin_unlock_irq(&hcd_urb_unlink_lock);
++}
++
+ /*-------------------------------------------------------------------------*/
+ /* called in any context */
+--- a/drivers/usb/core/hcd.h
++++ b/drivers/usb/core/hcd.h
+@@ -232,6 +232,7 @@ extern void usb_hcd_flush_endpoint(struc
+               struct usb_host_endpoint *ep);
+ extern void usb_hcd_disable_endpoint(struct usb_device *udev,
+               struct usb_host_endpoint *ep);
++extern void usb_hcd_synchronize_unlinks(struct usb_device *udev);
+ extern int usb_hcd_get_frame_number(struct usb_device *udev);
+ extern struct usb_hcd *usb_create_hcd(const struct hc_driver *driver,
+--- a/drivers/usb/core/hub.c
++++ b/drivers/usb/core/hub.c
+@@ -1349,6 +1349,7 @@ void usb_disconnect(struct usb_device **
+        */
+       dev_dbg (&udev->dev, "unregistering device\n");
+       usb_disable_device(udev, 0);
++      usb_hcd_synchronize_unlinks(udev);
+       usb_unlock_device(udev);
+--- a/drivers/usb/core/urb.c
++++ b/drivers/usb/core/urb.c
+@@ -465,6 +465,12 @@ EXPORT_SYMBOL_GPL(usb_submit_urb);
+  * indicating that the request has been canceled (rather than any other
+  * code).
+  *
++ * Drivers should not call this routine or related routines, such as
++ * usb_kill_urb() or usb_unlink_anchored_urbs(), after their disconnect
++ * method has returned.  The disconnect function should synchronize with
++ * a driver's I/O routines to insure that all URB-related activity has
++ * completed before it returns.
++ *
+  * This request is always asynchronous.  Success is indicated by
+  * returning -EINPROGRESS, at which time the URB will probably not yet
+  * have been given back to the device driver.  When it is eventually
+@@ -541,6 +547,9 @@ EXPORT_SYMBOL_GPL(usb_unlink_urb);
+  * This routine may not be used in an interrupt context (such as a bottom
+  * half or a completion handler), or when holding a spinlock, or in other
+  * situations where the caller can't schedule().
++ *
++ * This routine should not be called by a driver after its disconnect
++ * method has returned.
+  */
+ void usb_kill_urb(struct urb *urb)
+ {
+@@ -568,6 +577,9 @@ EXPORT_SYMBOL_GPL(usb_kill_urb);
+  *
+  * this allows all outstanding URBs to be killed starting
+  * from the back of the queue
++ *
++ * This routine should not be called by a driver after its disconnect
++ * method has returned.
+  */
+ void usb_kill_anchored_urbs(struct usb_anchor *anchor)
+ {
+@@ -597,6 +609,9 @@ EXPORT_SYMBOL_GPL(usb_kill_anchored_urbs
+  * from the back of the queue. This function is asynchronous.
+  * The unlinking is just tiggered. It may happen after this
+  * function has returned.
++ *
++ * This routine should not be called by a driver after its disconnect
++ * method has returned.
+  */
+ void usb_unlink_anchored_urbs(struct usb_anchor *anchor)
+ {
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:18 2008
+Message-Id: <20081104232318.757214800@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:21:51 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ jejb@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Takashi Iwai <tiwai@suse.de>
+Subject: [patch 07/57] ALSA: hda - Add reboot notifier
+Content-Disposition: inline; filename=alsa-hda-add-reboot-notifier.patch
+Content-Length: 2410
+Lines: 87
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Takashi Iwai <tiwai@suse.de>
+
+commit 0cbf00980f0fc4cc064a15ab3dfce19b5fae9130 upstream
+
+The current snd-hda-intel driver seems blocking the power-off on some
+devices like eeepc.  Although this is likely a BIOS problem, we can add
+a workaround by disabling IRQ lines before power-off operation.
+This patch adds the reboot notifier to achieve it.
+
+The detailed problem description is found in bug#11889:
+    http://bugme.linux-foundation.org/show_bug.cgi?id=11889
+
+Tested-by: Luiz Fernando N. Capitulino <lcapitulino@mandriva.com.br>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/pci/hda/hda_intel.c |   29 +++++++++++++++++++++++++++++
+ 1 file changed, 29 insertions(+)
+
+--- a/sound/pci/hda/hda_intel.c
++++ b/sound/pci/hda/hda_intel.c
+@@ -45,6 +45,7 @@
+ #include <linux/slab.h>
+ #include <linux/pci.h>
+ #include <linux/mutex.h>
++#include <linux/reboot.h>
+ #include <sound/core.h>
+ #include <sound/initval.h>
+ #include "hda_codec.h"
+@@ -385,6 +386,9 @@ struct azx {
+       /* for pending irqs */
+       struct work_struct irq_pending_work;
++
++      /* reboot notifier (for mysterious hangup problem at power-down) */
++      struct notifier_block reboot_notifier;
+ };
+ /* driver types */
+@@ -1890,12 +1894,36 @@ static int azx_resume(struct pci_dev *pc
+ /*
++ * reboot notifier for hang-up problem at power-down
++ */
++static int azx_halt(struct notifier_block *nb, unsigned long event, void *buf)
++{
++      struct azx *chip = container_of(nb, struct azx, reboot_notifier);
++      azx_stop_chip(chip);
++      return NOTIFY_OK;
++}
++
++static void azx_notifier_register(struct azx *chip)
++{
++      chip->reboot_notifier.notifier_call = azx_halt;
++      register_reboot_notifier(&chip->reboot_notifier);
++}
++
++static void azx_notifier_unregister(struct azx *chip)
++{
++      if (chip->reboot_notifier.notifier_call)
++              unregister_reboot_notifier(&chip->reboot_notifier);
++}
++
++/*
+  * destructor
+  */
+ static int azx_free(struct azx *chip)
+ {
+       int i;
++      azx_notifier_unregister(chip);
++
+       if (chip->initialized) {
+               azx_clear_irq_pending(chip);
+               for (i = 0; i < chip->num_streams; i++)
+@@ -2250,6 +2278,7 @@ static int __devinit azx_probe(struct pc
+       pci_set_drvdata(pci, card);
+       chip->running = 1;
+       power_down_all_codecs(chip);
++      azx_notifier_register(chip);
+       dev++;
+       return err;
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:19 2008
+Message-Id: <20081104232318.926549738@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:21:52 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ jejb@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Evgeniy Manachkin <sfstudio@mail.ru>,
+ Alan Cox <alan@redhat.com>,
+ Sam Ravnborg <sam@ravnborg.org>
+Subject: [patch 08/57] kbuild: mkspec - fix build rpm
+Content-Disposition: inline; filename=kbuild-mkspec-fix-build-rpm.patch
+Content-Length: 1413
+Lines: 41
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Evgeniy Manachkin <sfstudio@mail.ru>
+
+commit 46dca86cb93db80992a45e4b55737ff2b2f61cd0 upstream
+Date: Wed, 15 Oct 2008 23:37:26 +0600
+Subject: [patch 08/57] kbuild: mkspec - fix build rpm
+
+This is patch to fix incorrect mkspec script to make rpm correctly at 2.6.27 vanilla kernel.
+This is regression in 2.6.27. 2.6.26 make rpm work good.
+In 2.6.27 'make rpm' say error from rpmbuild "Many unpacked files (*.fw)."
+
+Signed-off-by: Evgeniy Manachkin <sfstudio@mail.ru>
+Acked-by: Alan Cox <alan@redhat.com>
+Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ scripts/package/mkspec |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/scripts/package/mkspec
++++ b/scripts/package/mkspec
+@@ -64,8 +64,10 @@ fi
+ echo "%install"
+ echo "%ifarch ia64"
+ echo 'mkdir -p $RPM_BUILD_ROOT/boot/efi $RPM_BUILD_ROOT/lib/modules'
++echo 'mkdir -p $RPM_BUILD_ROOT/lib/firmware'
+ echo "%else"
+ echo 'mkdir -p $RPM_BUILD_ROOT/boot $RPM_BUILD_ROOT/lib/modules'
++echo 'mkdir -p $RPM_BUILD_ROOT/lib/firmware'
+ echo "%endif"
+ echo 'INSTALL_MOD_PATH=$RPM_BUILD_ROOT make %{_smp_mflags} modules_install'
+@@ -92,5 +94,6 @@ echo "%files"
+ echo '%defattr (-, root, root)'
+ echo "%dir /lib/modules"
+ echo "/lib/modules/$KERNELRELEASE"
++echo "/lib/firmware"
+ echo "/boot/*"
+ echo ""
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:19 2008
+Message-Id: <20081104232319.099400407@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:21:53 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ jejb@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Ravikiran Thirumalai <kiran@scalex86.org>,
+ "H. Peter Anvin" <hpa@zytor.com>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 09/57] x86: fix /dev/mem mmap breakage when PAT is disabled
+Content-Disposition: inline; filename=x86-fix-dev-mem-mmap-breakage-when-pat-is-disabled.patch
+Content-Length: 1576
+Lines: 50
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Ravikiran G Thirumalai <kiran@scalex86.org>
+
+commit 9e41bff2708e420e61e6b89a54c15232857069b1 upstream
+
+Impact: allow /dev/mem mmaps on non-PAT CPUs/platforms
+
+Fix mmap to /dev/mem when CONFIG_X86_PAT is off and CONFIG_STRICT_DEVMEM is
+off
+
+mmap to /dev/mem on kernel memory has been failing since the
+introduction of PAT (CONFIG_STRICT_DEVMEM=n case).   Seems like
+the check to avoid cache aliasing with PAT is kicking in even
+when PAT is disabled. The bug seems to have crept in 2.6.26.
+
+This patch makes sure that the mmap to regular
+kernel memory succeeds if CONFIG_STRICT_DEVMEM=n and
+PAT is disabled, and the checks to avoid cache aliasing
+still happens if PAT is enabled.
+
+Signed-off-by: Ravikiran Thirumalai <kiran@scalex86.org>
+Tested-by: Tim Sirianni <tim@scalemp.com>
+Acked-by: H. Peter Anvin <hpa@zytor.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/mm/pat.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/arch/x86/mm/pat.c
++++ b/arch/x86/mm/pat.c
+@@ -403,12 +403,16 @@ static inline int range_is_allowed(unsig
+       return 1;
+ }
+ #else
++/* This check is needed to avoid cache aliasing when PAT is enabled */
+ static inline int range_is_allowed(unsigned long pfn, unsigned long size)
+ {
+       u64 from = ((u64)pfn) << PAGE_SHIFT;
+       u64 to = from + size;
+       u64 cursor = from;
++      if (!pat_enabled)
++              return 1;
++
+       while (cursor < to) {
+               if (!devmem_is_allowed(pfn)) {
+                       printk(KERN_INFO
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:19 2008
+Message-Id: <20081104232319.263910694@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:21:54 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ jejb@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jay Cliburn <jacliburn@bellsouth.net>,
+ Jeff Garzik <jgarzik@redhat.com>
+Subject: [patch 10/57] atl1: fix vlan tag regression
+Content-Disposition: inline; filename=atl1-fix-vlan-tag-regression.patch
+Content-Length: 1920
+Lines: 56
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jay Cliburn <jacliburn@bellsouth.net>
+
+commit dc5596d920b504d263c7ca38bd76326179b13dee upstream
+
+Commit 401c0aabec4b97320f962a0161a846d230a6f7aa introduced a regression
+in the atl1 driver by storing the VLAN tag in the wrong TX descriptor
+field.
+
+This patch causes the VLAN tag to be stored in its proper location.
+
+Tested-by: Ramon Casellas <ramon.casellas@cttc.es>
+Signed-off-by: Jay Cliburn <jacliburn@bellsouth.net>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/atlx/atl1.c |    7 ++++---
+ drivers/net/atlx/atl1.h |    2 +-
+ 2 files changed, 5 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/atlx/atl1.c
++++ b/drivers/net/atlx/atl1.c
+@@ -2317,7 +2317,8 @@ static void atl1_tx_queue(struct atl1_ad
+               if (tpd != ptpd)
+                       memcpy(tpd, ptpd, sizeof(struct tx_packet_desc));
+               tpd->buffer_addr = cpu_to_le64(buffer_info->dma);
+-              tpd->word2 = (cpu_to_le16(buffer_info->length) &
++              tpd->word2 &= ~(TPD_BUFLEN_MASK << TPD_BUFLEN_SHIFT);
++              tpd->word2 |= (cpu_to_le16(buffer_info->length) &
+                       TPD_BUFLEN_MASK) << TPD_BUFLEN_SHIFT;
+               /*
+@@ -2426,8 +2427,8 @@ static int atl1_xmit_frame(struct sk_buf
+               vlan_tag = (vlan_tag << 4) | (vlan_tag >> 13) |
+                       ((vlan_tag >> 9) & 0x8);
+               ptpd->word3 |= 1 << TPD_INS_VL_TAG_SHIFT;
+-              ptpd->word3 |= (vlan_tag & TPD_VL_TAGGED_MASK) <<
+-                      TPD_VL_TAGGED_SHIFT;
++              ptpd->word2 |= (vlan_tag & TPD_VLANTAG_MASK) <<
++                      TPD_VLANTAG_SHIFT;
+       }
+       tso = atl1_tso(adapter, skb, ptpd);
+--- a/drivers/net/atlx/atl1.h
++++ b/drivers/net/atlx/atl1.h
+@@ -504,7 +504,7 @@ struct rx_free_desc {
+ #define TPD_PKTNT_MASK                0x0001
+ #define TPD_PKTINT_SHIFT      15
+ #define TPD_VLANTAG_MASK      0xFFFF
+-#define TPD_VLAN_SHIFT                16
++#define TPD_VLANTAG_SHIFT     16
+ /* tpd word 3 bits 0:13 */
+ #define TPD_EOP_MASK          0x0001
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:19 2008
+Message-Id: <20081104232319.486492836@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:21:55 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ jejb@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ 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: [patch 11/57] libertas: fix buffer overrun
+Content-Disposition: inline; filename=libertas-fix-buffer-overrun.patch
+Content-Length: 1203
+Lines: 31
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Johannes Berg <johannes@sipsolutions.net>
+
+commit 48735d8d8bd701b1e0cd3d49c21e5e385ddcb077 upstream
+
+If somebody sends an invalid beacon/probe response, that can trash the
+whole BSS descriptor. The descriptor is, luckily, large enough so that
+it cannot scribble past the end of it; it's well above 400 bytes long.
+
+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/libertas/scan.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/wireless/libertas/scan.c
++++ b/drivers/net/wireless/libertas/scan.c
+@@ -598,8 +598,8 @@ static int lbs_process_bss(struct bss_de
+               switch (elem->id) {
+               case MFIE_TYPE_SSID:
+-                      bss->ssid_len = elem->len;
+-                      memcpy(bss->ssid, elem->data, elem->len);
++                      bss->ssid_len = min_t(int, 32, elem->len);
++                      memcpy(bss->ssid, elem->data, bss->ssid_len);
+                       lbs_deb_scan("got SSID IE: '%s', len %u\n",
+                                    escape_essid(bss->ssid, bss->ssid_len),
+                                    bss->ssid_len);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:19 2008
+Message-Id: <20081104232319.598652687@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:21:56 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Dan Nicholson <dbn.lists@gmail.com>,
+ Jiri Kosina <jkosina@suse.cz>
+Subject: [patch 12/57] Revert "HID: Invert HWHEEL mappings for some Logitech mice"
+Content-Disposition: inline; filename=revert-hid-invert-hwheel-mappings-for-some-logitech-mice.patch
+Content-Length: 2107
+Lines: 48
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Dan Nicholson <dbn.lists@gmail.com>
+
+commit 022b7024d4bb1f9a2f30021a2672a0f940ebfa7a upstream.
+
+This reverts commit 740f370dc61dc478d891d7d47660bb3ae39ddb4f.
+
+It turned out to be correct in the first place: a positive value should
+be sent when the wheel is moved to the right, and a negative value when
+moved to the left. This is the behavior expected by the Xorg evdev
+driver. I must have had a remapping somewhere else in my system when
+originally testing this. Testing on another system shows that the
+unpatched kernel is correct.
+
+Here is a bug report from Mandriva that brought the problem to my
+attention:
+
+    https://qa.mandriva.com/show_bug.cgi?id=44309#c19
+
+Signed-off-by: Dan Nicholson <dbn.lists@gmail.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/hid/usbhid/hid-quirks.c |    4 ----
+ 1 file changed, 4 deletions(-)
+
+--- a/drivers/hid/usbhid/hid-quirks.c
++++ b/drivers/hid/usbhid/hid-quirks.c
+@@ -247,8 +247,6 @@
+ #define USB_DEVICE_ID_LD_MACHINETEST  0x2040
+ #define USB_VENDOR_ID_LOGITECH                0x046d
+-#define USB_DEVICE_ID_LOGITECH_LX3    0xc044
+-#define USB_DEVICE_ID_LOGITECH_V150   0xc047
+ #define USB_DEVICE_ID_LOGITECH_RECEIVER       0xc101
+ #define USB_DEVICE_ID_LOGITECH_HARMONY  0xc110
+ #define USB_DEVICE_ID_LOGITECH_HARMONY_2 0xc111
+@@ -603,8 +601,6 @@ static const struct hid_blacklist {
+       { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_ELITE_KBD, HID_QUIRK_LOGITECH_IGNORE_DOUBLED_WHEEL | HID_QUIRK_LOGITECH_EXPANDED_KEYMAP },
+       { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_CORDLESS_DESKTOP_LX500, HID_QUIRK_LOGITECH_IGNORE_DOUBLED_WHEEL | HID_QUIRK_LOGITECH_EXPANDED_KEYMAP },
+-      { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_LX3, HID_QUIRK_INVERT_HWHEEL },
+-      { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_V150, HID_QUIRK_INVERT_HWHEEL },
+       { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K, HID_QUIRK_MICROSOFT_KEYS },
+       { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_LK6K, HID_QUIRK_MICROSOFT_KEYS },
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:19 2008
+Message-Id: <20081104232319.770397762@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:21:57 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Tejun Heo <tj@kernel.org>,
+ Larry Finger <Larry.Finger@lwfinger.net>,
+ Jeff Garzik <jgarzik@redhat.com>
+Subject: [patch 13/57] libata: initialize port_task when !CONFIG_ATA_SFF
+Content-Disposition: inline; filename=libata-initialize-port_task-when-config_ata_sff.patch
+Content-Length: 976
+Lines: 31
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Tejun Heo <tj@kernel.org>
+
+commit f667fdbbbea8bcce6cf9f7acb51b7cb4c264cc61 upstream
+
+ap->port_task was not initialized if !CONFIG_ATA_SFF later triggering
+lockdep warning.  Make sure it's initialized.
+
+Reported by Larry Finger.
+
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Cc: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ata/libata-core.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/ata/libata-core.c
++++ b/drivers/ata/libata-core.c
+@@ -5259,6 +5259,8 @@ struct ata_port *ata_port_alloc(struct a
+ #ifdef CONFIG_ATA_SFF
+       INIT_DELAYED_WORK(&ap->port_task, ata_pio_task);
++#else
++      INIT_DELAYED_WORK(&ap->port_task, NULL);
+ #endif
+       INIT_DELAYED_WORK(&ap->hotplug_task, ata_scsi_hotplug);
+       INIT_WORK(&ap->scsi_rescan_task, ata_scsi_dev_rescan);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:20 2008
+Message-Id: <20081104232319.936950853@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:21:58 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Florian Westphal <fw@strlen.de>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 14/57] syncookies: fix inclusion of tcp options in syn-ack
+Content-Disposition: inline; filename=0001-syncookies-fix-inclusion-of-tcp-options-in-syn-ack.patch
+Content-Length: 1654
+Lines: 48
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Florian Westphal <fw@strlen.de>
+
+[ Upstream commit 8b5f12d04b2e93842f3dda01f029842047bf3f81 ]
+
+David Miller noticed that commit
+33ad798c924b4a1afad3593f2796d465040aadd5 '(tcp: options clean up')
+did not move the req->cookie_ts check.
+This essentially disabled commit 4dfc2817025965a2fc78a18c50f540736a6b5c24
+'[Syncookies]: Add support for TCP options via timestamps.'.
+
+This restores the original logic.
+
+Signed-off-by: Florian Westphal <fw@strlen.de>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv4/tcp_output.c |   10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+--- a/net/ipv4/tcp_output.c
++++ b/net/ipv4/tcp_output.c
+@@ -2266,6 +2266,11 @@ struct sk_buff *tcp_make_synack(struct s
+       }
+       memset(&opts, 0, sizeof(opts));
++#ifdef CONFIG_SYN_COOKIES
++      if (unlikely(req->cookie_ts))
++              TCP_SKB_CB(skb)->when = cookie_init_timestamp(req);
++      else
++#endif
+       TCP_SKB_CB(skb)->when = tcp_time_stamp;
+       tcp_header_size = tcp_synack_options(sk, req,
+                                            dst_metric(dst, RTAX_ADVMSS),
+@@ -2292,11 +2297,6 @@ struct sk_buff *tcp_make_synack(struct s
+       /* RFC1323: The window in SYN & SYN/ACK segments is never scaled. */
+       th->window = htons(min(req->rcv_wnd, 65535U));
+-#ifdef CONFIG_SYN_COOKIES
+-      if (unlikely(req->cookie_ts))
+-              TCP_SKB_CB(skb)->when = cookie_init_timestamp(req);
+-      else
+-#endif
+       tcp_options_write((__be32 *)(th + 1), tp, &opts, &md5_hash_location);
+       th->doff = (tcp_header_size >> 2);
+       TCP_INC_STATS(sock_net(sk), TCP_MIB_OUTSEGS);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:20 2008
+Message-Id: <20081104232320.111650217@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:21:59 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ =?ISO-8859-15?q?Ilpo=20J=C3=A4rvinen?= <ilpo.jarvinen@helsinki.fi>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 15/57] tcp: Restore ordering of TCP options for the sake of inter-operability
+Content-Disposition: inline; filename=0002-tcp-Restore-ordering-of-TCP-options-for-the-sake-of.patch
+Content-Length: 3224
+Lines: 80
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
+
+[ Upstream commit fd6149d332973bafa50f03ddb0ea9513e67f4517 ]
+
+This is not our bug! Sadly some devices cannot cope with the change
+of TCP option ordering which was a result of the recent rewrite of
+the option code (not that there was some particular reason steming
+from the rewrite for the reordering) though any ordering of TCP
+options is perfectly legal. Thus we restore the original ordering
+to allow interoperability with/through such broken devices and add
+some warning about this trap. Since the reordering just happened
+without any particular reason, this change shouldn't cost us
+anything.
+
+There are already couple of known failure reports (within close
+proximity of the last release), so the problem might be more
+wide-spread than a single device. And other reports which may
+be due to the same problem though the symptoms were less obvious.
+Analysis of one of the case revealed (with very high probability)
+that sack capability cannot be negotiated as the first option
+(SYN never got a response).
+
+Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
+Reported-by: Aldo Maggi <sentiniate@tiscali.it>
+Tested-by: Aldo Maggi <sentiniate@tiscali.it>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv4/tcp_output.c |   23 +++++++++++++++++------
+ 1 file changed, 17 insertions(+), 6 deletions(-)
+
+--- a/net/ipv4/tcp_output.c
++++ b/net/ipv4/tcp_output.c
+@@ -357,6 +357,17 @@ struct tcp_out_options {
+       __u32 tsval, tsecr;     /* need to include OPTION_TS */
+ };
++/* Beware: Something in the Internet is very sensitive to the ordering of
++ * TCP options, we learned this through the hard way, so be careful here.
++ * Luckily we can at least blame others for their non-compliance but from
++ * inter-operatibility perspective it seems that we're somewhat stuck with
++ * the ordering which we have been using if we want to keep working with
++ * those broken things (not that it currently hurts anybody as there isn't
++ * particular reason why the ordering would need to be changed).
++ *
++ * At least SACK_PERM as the first option is known to lead to a disaster
++ * (but it may well be that other scenarios fail similarly).
++ */
+ static void tcp_options_write(__be32 *ptr, struct tcp_sock *tp,
+                             const struct tcp_out_options *opts,
+                             __u8 **md5_hash) {
+@@ -371,6 +382,12 @@ static void tcp_options_write(__be32 *pt
+               *md5_hash = NULL;
+       }
++      if (unlikely(opts->mss)) {
++              *ptr++ = htonl((TCPOPT_MSS << 24) |
++                             (TCPOLEN_MSS << 16) |
++                             opts->mss);
++      }
++
+       if (likely(OPTION_TS & opts->options)) {
+               if (unlikely(OPTION_SACK_ADVERTISE & opts->options)) {
+                       *ptr++ = htonl((TCPOPT_SACK_PERM << 24) |
+@@ -387,12 +404,6 @@ static void tcp_options_write(__be32 *pt
+               *ptr++ = htonl(opts->tsecr);
+       }
+-      if (unlikely(opts->mss)) {
+-              *ptr++ = htonl((TCPOPT_MSS << 24) |
+-                             (TCPOLEN_MSS << 16) |
+-                             opts->mss);
+-      }
+-
+       if (unlikely(OPTION_SACK_ADVERTISE & opts->options &&
+                    !(OPTION_TS & opts->options))) {
+               *ptr++ = htonl((TCPOPT_NOP << 24) |
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:20 2008
+Message-Id: <20081104232320.277160144@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:00 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ =?ISO-8859-15?q?Ilpo=20J=C3=A4rvinen?= <ilpo.jarvinen@helsinki.fi>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 16/57] tcpv6: fix option space offsets with md5
+Content-Disposition: inline; filename=0003-tcpv6-fix-option-space-offsets-with-md5.patch
+Content-Length: 876
+Lines: 28
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
+
+[ Upstream commit 53b125779fb0b29e5b316bf3dc7d199e6dcea567 ]
+
+More breakage :-), part of timestamps just were previously
+overwritten.
+
+Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv6/tcp_ipv6.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/net/ipv6/tcp_ipv6.c
++++ b/net/ipv6/tcp_ipv6.c
+@@ -1087,7 +1087,7 @@ static void tcp_v6_send_ack(struct sk_bu
+               *topt++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |
+                               (TCPOPT_TIMESTAMP << 8) | TCPOLEN_TIMESTAMP);
+               *topt++ = htonl(tcp_time_stamp);
+-              *topt = htonl(ts);
++              *topt++ = htonl(ts);
+       }
+ #ifdef CONFIG_TCP_MD5SIG
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:20 2008
+Message-Id: <20081104232320.442963768@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:01 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jarek Poplawski <jarkao2@gmail.com>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 17/57] pkt_sched: sch_generic: Fix oops in sch_teql
+Content-Disposition: inline; filename=0004-pkt_sched-sch_generic-Fix-oops-in-sch_teql.patch
+Content-Length: 1435
+Lines: 43
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jarek Poplawski <jarkao2@gmail.com>
+
+[ Upstream commit 9f3ffae0dbce491a3e9871b686342fd5aa854f05 ]
+
+After these commands:
+# modprobe sch_teql
+# tc qdisc add dev eth0 root teql0
+# tc qdisc del dev eth0 root
+we get an oops in teql_destroy() when spin_lock is taken from a null
+qdisc_sleeping pointer. It's because at the moment teql0 dev haven't
+been activated yet, and a qdisc_root_sleeping() is pointing to noop
+qdisc's netdev_queue with qdisc_sleeping uninitialized. This patch
+fixes this both for noop and noqueue netdev_queues to avoid similar
+problems in the future.
+
+Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/sched/sch_generic.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/net/sched/sch_generic.c
++++ b/net/sched/sch_generic.c
+@@ -319,6 +319,7 @@ struct Qdisc_ops noop_qdisc_ops __read_m
+ static struct netdev_queue noop_netdev_queue = {
+       .qdisc          =       &noop_qdisc,
++      .qdisc_sleeping =       &noop_qdisc,
+ };
+ struct Qdisc noop_qdisc = {
+@@ -344,6 +345,7 @@ static struct Qdisc_ops noqueue_qdisc_op
+ static struct Qdisc noqueue_qdisc;
+ static struct netdev_queue noqueue_netdev_queue = {
+       .qdisc          =       &noqueue_qdisc,
++      .qdisc_sleeping =       &noqueue_qdisc,
+ };
+ static struct Qdisc noqueue_qdisc = {
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:20 2008
+Message-Id: <20081104232320.620281550@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:02 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Andrea Shepard <andrea@persephoneslair.org>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 18/57] sparc64: Fix race in arch/sparc64/kernel/trampoline.S
+Content-Disposition: inline; filename=0001-sparc64-Fix-race-in-arch-sparc64-kernel-trampoline.patch
+Content-Length: 1907
+Lines: 70
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Andrea Shepard <andrea@persephoneslair.org>
+
+[ Upstream commit e0037df3852b4b60edbe01f70f4968e4a9fdb272 ]
+
+Make arch/sparc64/kernel/trampoline.S in 2.6.27.1 lock prom_entry_lock
+when calling the PROM.  This prevents a race condition that I observed
+causing a hang on startup on a 12-CPU E4500.
+
+I am not subscribed to this list, so please CC me on replies.
+
+Signed-off-by: Andrea Shepard <andrea@persephoneslair.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/sparc64/kernel/trampoline.S |   18 ++++++++++++++----
+ 1 file changed, 14 insertions(+), 4 deletions(-)
+
+--- a/arch/sparc64/kernel/trampoline.S
++++ b/arch/sparc64/kernel/trampoline.S
+@@ -328,6 +328,12 @@ after_lock_tlb:
+       wrpr            %g0, 0, %wstate
++      sethi           %hi(prom_entry_lock), %g2
++1:    ldstub          [%g2 + %lo(prom_entry_lock)], %g1
++      membar          #StoreLoad | #StoreStore
++      brnz,pn         %g1, 1b
++       nop
++
+       /* As a hack, put &init_thread_union into %g6.
+        * prom_world() loads from here to restore the %asi
+        * register.
+@@ -337,7 +343,7 @@ after_lock_tlb:
+       sethi           %hi(is_sun4v), %o0
+       lduw            [%o0 + %lo(is_sun4v)], %o0
+-      brz,pt          %o0, 1f
++      brz,pt          %o0, 2f
+        nop
+       TRAP_LOAD_TRAP_BLOCK(%g2, %g3)
+@@ -369,10 +375,10 @@ after_lock_tlb:
+       call            %o1
+        add            %sp, (2047 + 128), %o0
+-      ba,pt           %xcc, 2f
++      ba,pt           %xcc, 3f
+        nop
+-1:    sethi           %hi(sparc64_ttable_tl0), %o0
++2:    sethi           %hi(sparc64_ttable_tl0), %o0
+       set             prom_set_trap_table_name, %g2
+       stx             %g2, [%sp + 2047 + 128 + 0x00]
+       mov             1, %g2
+@@ -386,7 +392,11 @@ after_lock_tlb:
+       call            %o1
+        add            %sp, (2047 + 128), %o0
+-2:    ldx             [%l0], %g6
++3:    sethi           %hi(prom_entry_lock), %g2
++      stb             %g0, [%g2 + %lo(prom_entry_lock)]
++      membar          #StoreStore | #StoreLoad
++
++      ldx             [%l0], %g6
+       ldx             [%g6 + TI_TASK], %g4
+       mov             1, %g5
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:20 2008
+Message-Id: <20081104232320.795317339@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:03 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 19/57] math-emu: Fix signalling of underflow and inexact while packing result.
+Content-Disposition: inline; filename=0002-math-emu-Fix-signalling-of-underflow-and-inexact-wh.patch
+Content-Length: 3676
+Lines: 116
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Kumar Gala <galak@kernel.crashing.org>
+
+[ Upstream commit 930cc144a043ff95e56b6888fa51c618b33f89e7 ]
+
+I'm trying to move the powerpc math-emu code to use the include/math-emu bits.
+
+In doing so I've been using TestFloat to see how good or bad we are
+doing.  For the most part the current math-emu code that PPC uses has
+a number of issues that the code in include/math-emu seems to solve
+(plus bugs we've had for ever that no one every realized).
+
+Anyways, I've come across a case that we are flagging underflow and
+inexact because we think we have a denormalized result from a double
+precision divide:
+
+000.FFFFFFFFFFFFF / 3FE.FFFFFFFFFFFFE
+       soft: 001.0000000000000 .....  syst: 001.0000000000000 ...ux
+
+What it looks like is the results out of FP_DIV_D are:
+
+D:
+sign:    0
+mantissa: 01000000 00000000
+exp:    -1023 (0)
+
+The problem seems like we aren't normalizing the result and bumping the exp.
+
+Now that I'm digging into this a bit I'm thinking my issue has to do with
+the fix DaveM put in place from back in Aug 2007 (commit
+405849610fd96b4f34cd1875c4c033228fea6c0f):
+
+[MATH-EMU]: Fix underflow exception reporting.
+
+    2) we ended up rounding back up to normal (this is the case where
+       we set the exponent to 1 and set the fraction to zero), this
+       should set inexact too
+...
+
+    Another example, "0x0.0000000000001p-1022 / 16.0", should signal both
+    inexact and underflow.  The cpu implementations and ieee1754
+    literature is very clear about this.  This is case #2 above.
+
+Here is the distilled glibc test case from Jakub Jelinek which prompted that
+commit:
+
+--------------------
+#include <float.h>
+#include <fenv.h>
+#include <stdio.h>
+
+volatile double d = DBL_MIN;
+volatile double e = 0x0.0000000000001p-1022;
+volatile double f = 16.0;
+int
+main (void)
+{
+  printf ("%x\n", fetestexcept (FE_UNDERFLOW));
+  d /= f;
+  printf ("%x\n", fetestexcept (FE_UNDERFLOW));
+  e /= f;
+  printf ("%x\n", fetestexcept (FE_UNDERFLOW));
+  return 0;
+}
+--------------------
+
+It looks like the case I have we are exact before rounding, but think it
+looks like the rounding case since it appears as if "overflow is set".
+
+000.FFFFFFFFFFFFF / 3FE.FFFFFFFFFFFFE = 001.0000000000000
+
+I think the following adds the check for my case and still works for the
+issue your commit was trying to resolve.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/math-emu/op-common.h |   17 +++++++++++++----
+ 1 file changed, 13 insertions(+), 4 deletions(-)
+
+--- a/include/math-emu/op-common.h
++++ b/include/math-emu/op-common.h
+@@ -139,18 +139,27 @@ do {                                                             \
+       if (X##_e <= _FP_WFRACBITS_##fs)                        \
+         {                                                     \
+           _FP_FRAC_SRS_##wc(X, X##_e, _FP_WFRACBITS_##fs);    \
+-          _FP_ROUND(wc, X);                                   \
+           if (_FP_FRAC_HIGH_##fs(X)                           \
+               & (_FP_OVERFLOW_##fs >> 1))                     \
+             {                                                 \
+               X##_e = 1;                                      \
+               _FP_FRAC_SET_##wc(X, _FP_ZEROFRAC_##wc);        \
+-              FP_SET_EXCEPTION(FP_EX_INEXACT);                \
+             }                                                 \
+           else                                                \
+             {                                                 \
+-              X##_e = 0;                                      \
+-              _FP_FRAC_SRL_##wc(X, _FP_WORKBITS);             \
++              _FP_ROUND(wc, X);                               \
++              if (_FP_FRAC_HIGH_##fs(X)                       \
++                 & (_FP_OVERFLOW_##fs >> 1))                  \
++                {                                             \
++                  X##_e = 1;                                  \
++                  _FP_FRAC_SET_##wc(X, _FP_ZEROFRAC_##wc);    \
++                  FP_SET_EXCEPTION(FP_EX_INEXACT);            \
++                }                                             \
++              else                                            \
++                {                                             \
++                  X##_e = 0;                                  \
++                  _FP_FRAC_SRL_##wc(X, _FP_WORKBITS);         \
++                }                                             \
+             }                                                 \
+           if ((FP_CUR_EXCEPTIONS & FP_EX_INEXACT) ||          \
+               (FP_TRAPPING_EXCEPTIONS & FP_EX_UNDERFLOW))     \
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:21 2008
+Message-Id: <20081104232320.967296679@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:04 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ linux1394-devel@lists.sourceforge.net,
+ Stefan Richter <stefanr@s5r6.in-berlin.de>
+Subject: [patch 20/57] firewire: fix setting tag and sy in iso transmission
+Content-Disposition: inline; filename=firewire-fix-setting-tag-and-sy-in-iso-transmission.patch
+Content-Length: 1053
+Lines: 29
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Stefan Richter <stefanr@s5r6.in-berlin.de>
+
+commit 7a1003449c693f0d57443c8786bbf19717921ae0 upstream
+
+Reported by Jay Fenlason:
+The iso packet control accessors in fw-cdev.c had bogus masks.
+
+Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/firewire/fw-cdev.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/firewire/fw-cdev.c
++++ b/drivers/firewire/fw-cdev.c
+@@ -720,8 +720,8 @@ static int ioctl_create_iso_context(stru
+ #define GET_PAYLOAD_LENGTH(v) ((v) & 0xffff)
+ #define GET_INTERRUPT(v)      (((v) >> 16) & 0x01)
+ #define GET_SKIP(v)           (((v) >> 17) & 0x01)
+-#define GET_TAG(v)            (((v) >> 18) & 0x02)
+-#define GET_SY(v)             (((v) >> 20) & 0x04)
++#define GET_TAG(v)            (((v) >> 18) & 0x03)
++#define GET_SY(v)             (((v) >> 20) & 0x0f)
+ #define GET_HEADER_LENGTH(v)  (((v) >> 24) & 0xff)
+ static int ioctl_queue_iso(struct client *client, void *buffer)
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:21 2008
+Message-Id: <20081104232321.143395169@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:05 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ linux1394-devel@lists.sourceforge.net,
+ Stefan Richter <stefanr@s5r6.in-berlin.de>
+Subject: [patch 21/57] firewire: fix ioctl() return code
+Content-Disposition: inline; filename=firewire-fix-ioctl-return-code.patch
+Content-Length: 785
+Lines: 30
+
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Stefan Richter <stefanr@s5r6.in-berlin.de>
+
+commit 99692f71ee04c6f249d0bf6a581359f32f409a38 upstream
+
+Reported by Jay Fenlason:  ioctl() did not return as intended
+  - the size of data read into ioctl_send_request,
+  - the number of datagrams enqueued by ioctl_queue_iso.
+
+
+Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/firewire/fw-cdev.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/firewire/fw-cdev.c
++++ b/drivers/firewire/fw-cdev.c
+@@ -913,7 +913,7 @@ dispatch_ioctl(struct client *client, un
+                       return -EFAULT;
+       }
+-      return 0;
++      return retval;
+ }
+ static long
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:21 2008
+Message-Id: <20081104232321.306177799@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:06 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ linux1394-devel@lists.sourceforge.net,
+ Jay Fenlason <fenlason@redhat.com>,
+ Stefan Richter <stefanr@s5r6.in-berlin.de>
+Subject: [patch 22/57] firewire: Survive more than 256 bus resets
+Content-Disposition: inline; filename=firewire-survive-more-than-256-bus-resets.patch
+Content-Length: 1163
+Lines: 34
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jay Fenlason <fenlason@redhat.com>
+
+Same as commit 4f9740d4f5a17fa6a1b097fa3ccdfb7246660307 upstream
+
+The "color" is used during the topology building after a bus reset,
+hovever in "struct fw_node"s it is stored in a u8, but in struct fw_card
+it is stored in an int.  When the value wraps in one struct, but not
+the other, disaster strikes.
+
+Fixes http://bugzilla.kernel.org/show_bug.cgi?id=10922 -
+machine locks up solid if a series of bus resets occurs.
+
+
+Signed-off-by: Jay Fenlason <fenlason@redhat.com>
+Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/firewire/fw-transaction.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/firewire/fw-transaction.h
++++ b/drivers/firewire/fw-transaction.h
+@@ -248,7 +248,7 @@ struct fw_card {
+       struct fw_node *local_node;
+       struct fw_node *root_node;
+       struct fw_node *irm_node;
+-      int color;
++      u8 color; /* must be u8 to match the definition in struct fw_node */
+       int gap_count;
+       bool beta_repeaters_present;
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:21 2008
+Message-Id: <20081104232321.466568445@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:07 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ linux1394-devel@lists.sourceforge.net,
+ Jay Fenlason <fenlason@redhat.com>,
+ Stefan Richter <stefanr@s5r6.in-berlin.de>
+Subject: [patch 23/57] firewire: fix struct fw_node memory leak
+Content-Disposition: inline; filename=firewire-fix-struct-fw_node-memory-leak.patch
+Content-Length: 1155
+Lines: 39
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jay Fenlason <fenlason@redhat.com>
+
+commit 77e557191701afa55ae7320d42ad6458a2ad292e upstream
+
+With the bus_resets patch applied, it is easy to see this memory leak
+by repeatedly resetting the firewire bus while running slabtop in
+another window.  Just watch kmalloc-32 grow and grow...
+
+Signed-off-by: Jay Fenlason <fenlason@redhat.com>
+Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
+
+---
+ drivers/firewire/fw-topology.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/drivers/firewire/fw-topology.c
++++ b/drivers/firewire/fw-topology.c
+@@ -413,7 +413,7 @@ static void
+ update_tree(struct fw_card *card, struct fw_node *root)
+ {
+       struct list_head list0, list1;
+-      struct fw_node *node0, *node1;
++      struct fw_node *node0, *node1, *next1;
+       int i, event;
+       INIT_LIST_HEAD(&list0);
+@@ -485,7 +485,9 @@ update_tree(struct fw_card *card, struct
+               }
+               node0 = fw_node(node0->link.next);
+-              node1 = fw_node(node1->link.next);
++              next1 = fw_node(node1->link.next);
++              fw_node_put(node1);
++              node1 = next1;
+       }
+ }
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:21 2008
+Message-Id: <20081104232321.635495424@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:08 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ linux1394-devel@lists.sourceforge.net,
+ Stefan Richter <stefanr@s5r6.in-berlin.de>
+Subject: [patch 24/57] firewire: fw-sbp2: delay first login to avoid retries
+Content-Disposition: inline; filename=firewire-fw-sbp2-delay-first-login-to-avoid-retries.patch
+Content-Length: 1702
+Lines: 43
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Stefan Richter <stefanr@s5r6.in-berlin.de>
+
+commit 0dcfeb7e3c8695c5aa3677dda8efb9bef2e7e64d upstream
+
+This optimizes firewire-sbp2's device probe for the case that the local
+node and the SBP-2 node were discovered at the same time.  In this case,
+fw-core's bus management work and fw-sbp2's login and SCSI probe work
+are scheduled in parallel (in the globally shared workqueue and in
+fw-sbp2's workqueue, respectively).  The bus reset from fw-core may then
+disturb and extremely delay the login and SCSI probe because the latter
+fails with several command timeouts and retries and has to be retried
+from scratch.
+
+We avoid this particular situation of sbp2_login() and fw_card_bm_work()
+running in parallel by delaying the first sbp2_login() a little bit.
+
+This is meant to be a short-term fix for
+https://bugzilla.redhat.com/show_bug.cgi?id=466679.  In the long run,
+the SCSI probe, i.e. fw-sbp2's call of __scsi_add_device(), should be
+parallelized with sbp2_reconnect().
+
+Problem reported and fix tested and confirmed by Alex Kanavin.
+
+Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/firewire/fw-sbp2.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/firewire/fw-sbp2.c
++++ b/drivers/firewire/fw-sbp2.c
+@@ -1158,7 +1158,7 @@ static int sbp2_probe(struct device *dev
+       /* Do the login in a workqueue so we can easily reschedule retries. */
+       list_for_each_entry(lu, &tgt->lu_list, link)
+-              sbp2_queue_work(lu, 0);
++              sbp2_queue_work(lu, DIV_ROUND_UP(HZ, 5));
+       return 0;
+  fail_tgt_put:
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:21 2008
+Message-Id: <20081104232321.794834597@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:09 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ linux1394-devel@lists.sourceforge.net,
+ Jay Fenlason <fenlason@redhat.com>,
+ Stefan Richter <stefanr@s5r6.in-berlin.de>
+Subject: [patch 25/57] firewire: fw-sbp2: fix races
+Content-Disposition: inline; filename=firewire-fw-sbp2-fix-races.patch
+Content-Length: 3328
+Lines: 98
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jay Fenlason <fenlason@redhat.com>
+
+Same as commit cd1f70fdb4823c97328a1f151f328eb36fafd579 upstream
+
+1: There is a small race between queue_delayed_work() and its
+   corresponding kref_get().  Do the kref_get first, and _put it again
+   if the queue_delayed_work() failed, so there is no chance of the
+   kref going to zero while the work is scheduled.
+2: An SBP2_LOGOUT_REQUEST could be sent out with a login_id full of
+   garbage.  Initialize it to an invalid value so we can tell if we
+   ever got a valid login_id.
+3: The node ID and generation may have changed but the new values may
+   not yet have been recorded in lu and tgt when the final logout is
+   attempted.  Use the latest values from the device in
+   sbp2_release_target().
+
+Signed-off-by: Jay Fenlason <fenlason@redhat.com>
+Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/firewire/fw-sbp2.c |   36 ++++++++++++++++++++++++++----------
+ 1 file changed, 26 insertions(+), 10 deletions(-)
+
+--- a/drivers/firewire/fw-sbp2.c
++++ b/drivers/firewire/fw-sbp2.c
+@@ -172,6 +172,9 @@ struct sbp2_target {
+       int blocked;    /* ditto */
+ };
++/* Impossible login_id, to detect logout attempt before successful login */
++#define INVALID_LOGIN_ID 0x10000
++
+ /*
+  * Per section 7.4.8 of the SBP-2 spec, a mgt_ORB_timeout value can be
+  * provided in the config rom. Most devices do provide a value, which
+@@ -791,9 +794,20 @@ static void sbp2_release_target(struct k
+                       scsi_remove_device(sdev);
+                       scsi_device_put(sdev);
+               }
+-              sbp2_send_management_orb(lu, tgt->node_id, lu->generation,
+-                              SBP2_LOGOUT_REQUEST, lu->login_id, NULL);
+-
++              if (lu->login_id != INVALID_LOGIN_ID) {
++                      int generation, node_id;
++                      /*
++                       * tgt->node_id may be obsolete here if we failed
++                       * during initial login or after a bus reset where
++                       * the topology changed.
++                       */
++                      generation = device->generation;
++                      smp_rmb(); /* node_id vs. generation */
++                      node_id    = device->node_id;
++                      sbp2_send_management_orb(lu, node_id, generation,
++                                               SBP2_LOGOUT_REQUEST,
++                                               lu->login_id, NULL);
++              }
+               fw_core_remove_address_handler(&lu->address_handler);
+               list_del(&lu->link);
+               kfree(lu);
+@@ -808,19 +822,20 @@ static void sbp2_release_target(struct k
+ static struct workqueue_struct *sbp2_wq;
++static void sbp2_target_put(struct sbp2_target *tgt)
++{
++      kref_put(&tgt->kref, sbp2_release_target);
++}
++
+ /*
+  * Always get the target's kref when scheduling work on one its units.
+  * Each workqueue job is responsible to call sbp2_target_put() upon return.
+  */
+ static void sbp2_queue_work(struct sbp2_logical_unit *lu, unsigned long delay)
+ {
+-      if (queue_delayed_work(sbp2_wq, &lu->work, delay))
+-              kref_get(&lu->tgt->kref);
+-}
+-
+-static void sbp2_target_put(struct sbp2_target *tgt)
+-{
+-      kref_put(&tgt->kref, sbp2_release_target);
++      kref_get(&lu->tgt->kref);
++      if (!queue_delayed_work(sbp2_wq, &lu->work, delay))
++              sbp2_target_put(lu->tgt);
+ }
+ static void
+@@ -993,6 +1008,7 @@ static int sbp2_add_logical_unit(struct 
+       lu->tgt      = tgt;
+       lu->lun      = lun_entry & 0xffff;
++      lu->login_id = INVALID_LOGIN_ID;
+       lu->retries  = 0;
+       lu->has_sdev = false;
+       lu->blocked  = false;
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:22 2008
+Message-Id: <20081104232321.969662832@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:10 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ linux-acpi@vger.kernel.org,
+ Guillem Jover <guillem.jover@nokia.com>,
+ Dmitry Torokhov <dtor@mail.ru>,
+ Len Brown <len.brown@intel.com>
+Subject: [patch 26/57] ACPI: Always report a sync event after a lid state change
+Content-Disposition: inline; filename=acpi-always-report-a-sync-event-after-a-lid-state-change.patch
+Content-Length: 1286
+Lines: 40
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Guillem Jover <guillem.jover@nokia.com>
+
+upstream commit df316e939100e789b3c5d4d102619ccf5834bd00
+
+Currently not always an EV_SYN event is reported to userland
+after the EV_SW SW_LID event has been sent. This is easy to verify
+by using “input-events” from input-utils and just closing and opening
+the lid.
+
+Signed-off-by: Guillem Jover <guillem.jover@nokia.com>
+Acked-by: Dmitry Torokhov <dtor@mail.ru>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/acpi/button.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/acpi/button.c
++++ b/drivers/acpi/button.c
+@@ -262,6 +262,7 @@ static int acpi_lid_send_state(struct ac
+               return -ENODEV;
+       /* input layer checks if event is redundant */
+       input_report_switch(button->input, SW_LID, !state);
++      input_sync(button->input);
+       return 0;
+ }
+@@ -285,8 +286,8 @@ static void acpi_button_notify(acpi_hand
+                       input_report_key(input, keycode, 1);
+                       input_sync(input);
+                       input_report_key(input, keycode, 0);
++                      input_sync(input);
+               }
+-              input_sync(input);
+               acpi_bus_generate_proc_event(button->device, event,
+                                       ++button->pushed);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:22 2008
+Message-Id: <20081104232322.133279291@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:11 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Guennadi Liakhovetski <g.liakhovetski@gmx.de>,
+ Kumar Gala <galak@kernel.crashing.org>
+Subject: [patch 27/57] powerpc: fix i2c on PPC linkstation / kurobox machines
+Content-Disposition: inline; filename=powerpc-fix-i2c-on-ppc-linkstation-kurobox-machines.patch
+Content-Length: 2482
+Lines: 79
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
+
+commit 22e181ba7f09197dd6f35a48013cb86289644eb6 upstream.
+
+The i2c bus defn is broken on linkstation / kurobox machines since at
+least 2.6.27. Fix it. Also remove CONFIG_SERIAL_OF_PLATFORM, which, if
+enabled, breaks the serial console after the
+"console handover: boot [udbg0] -> real [ttyS1]" message.
+
+Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
+Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/powerpc/configs/linkstation_defconfig       |    7 +++----
+ arch/powerpc/platforms/embedded6xx/linkstation.c |   14 ++++++++++++++
+ 2 files changed, 17 insertions(+), 4 deletions(-)
+
+--- a/arch/powerpc/configs/linkstation_defconfig
++++ b/arch/powerpc/configs/linkstation_defconfig
+@@ -1,7 +1,7 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.27-rc4
+-# Thu Aug 21 00:52:05 2008
++# Linux kernel version: 2.6.27
++# Fri Oct 24 00:42:39 2008
+ #
+ # CONFIG_PPC64 is not set
+@@ -934,7 +934,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+ CONFIG_SERIAL_CORE=y
+ CONFIG_SERIAL_CORE_CONSOLE=y
+ # CONFIG_SERIAL_JSM is not set
+-CONFIG_SERIAL_OF_PLATFORM=y
++# CONFIG_SERIAL_OF_PLATFORM is not set
+ CONFIG_UNIX98_PTYS=y
+ CONFIG_LEGACY_PTYS=y
+ CONFIG_LEGACY_PTY_COUNT=256
+@@ -1211,7 +1211,6 @@ CONFIG_USB_STORAGE=m
+ # CONFIG_USB_STORAGE_ALAUDA is not set
+ # CONFIG_USB_STORAGE_ONETOUCH is not set
+ # CONFIG_USB_STORAGE_KARMA is not set
+-# CONFIG_USB_STORAGE_SIERRA is not set
+ # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+ # CONFIG_USB_LIBUSUAL is not set
+--- a/arch/powerpc/platforms/embedded6xx/linkstation.c
++++ b/arch/powerpc/platforms/embedded6xx/linkstation.c
+@@ -13,6 +13,7 @@
+ #include <linux/kernel.h>
+ #include <linux/initrd.h>
+ #include <linux/mtd/physmap.h>
++#include <linux/of_platform.h>
+ #include <asm/time.h>
+ #include <asm/prom.h>
+@@ -54,6 +55,19 @@ static struct mtd_partition linkstation_
+       },
+ };
++static __initdata struct of_device_id of_bus_ids[] = {
++      { .type = "soc", },
++      { .compatible = "simple-bus", },
++      {},
++};
++
++static int __init declare_of_platform_devices(void)
++{
++      of_platform_bus_probe(NULL, of_bus_ids, NULL);
++      return 0;
++}
++machine_device_initcall(linkstation, declare_of_platform_devices);
++
+ static int __init linkstation_add_bridge(struct device_node *dev)
+ {
+ #ifdef CONFIG_PCI
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:22 2008
+Message-Id: <20081104232322.364422911@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:12 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jon Tollefson <kniht@linux.vnet.ibm.com>,
+ Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Subject: [patch 28/57] powerpc: Reserve in bootmem lmb reserved regions that cross NUMA nodes
+Content-Disposition: inline; filename=powerpc-reserve-in-bootmem-lmb-reserved-regions-that-cross-numa-nodes.patch
+Content-Length: 6658
+Lines: 186
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jon Tollefson <kniht@linux.vnet.ibm.com>
+
+commit 8f64e1f2d1e09267ac926e15090fd505c1c0cbcb upstream
+
+If there are multiple reserved memory blocks via lmb_reserve() that are
+contiguous addresses and on different NUMA nodes we are losing track of which
+address ranges to reserve in bootmem on which node.  I discovered this
+when I recently got to try 16GB huge pages on a system with more then 2 nodes.
+
+When scanning the device tree in early boot we call lmb_reserve() with
+the addresses of the 16G pages that we find so that the memory doesn't
+get used for something else.  For example the addresses for the pages
+could be 4000000000, 4400000000, 4800000000, 4C00000000, etc - 8 pages,
+one on each of eight nodes.  In the lmb after all the pages have been
+reserved it will look something like the following:
+
+lmb_dump_all:
+    memory.cnt            = 0x2
+    memory.size           = 0x3e80000000
+    memory.region[0x0].base       = 0x0
+                      .size     = 0x1e80000000
+    memory.region[0x1].base       = 0x4000000000
+                      .size     = 0x2000000000
+    reserved.cnt          = 0x5
+    reserved.size         = 0x3e80000000
+    reserved.region[0x0].base       = 0x0
+                      .size     = 0x7b5000
+    reserved.region[0x1].base       = 0x2a00000
+                      .size     = 0x78c000
+    reserved.region[0x2].base       = 0x328c000
+                      .size     = 0x43000
+    reserved.region[0x3].base       = 0xf4e8000
+                      .size     = 0xb18000
+    reserved.region[0x4].base       = 0x4000000000
+                      .size     = 0x2000000000
+
+The reserved.region[0x4] contains the 16G pages.  In
+arch/powerpc/mm/num.c: do_init_bootmem() we loop through each of the
+node numbers looking for the reserved regions that belong to the
+particular node.  It is not able to identify region 0x4 as being a part
+of each of the 8 nodes.  It is assuming that a reserved region is only
+on a single node.
+
+This patch takes out the reserved region loop from inside
+the loop that goes over each node.  It looks up the active region containing
+the start of the reserved region.  If it extends past that active region then
+it adjusts the size and gets the next active region containing it.
+
+Signed-off-by: Jon Tollefson <kniht@linux.vnet.ibm.com>
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/powerpc/mm/numa.c |  108 ++++++++++++++++++++++++++++++++++++-------------
+ 1 file changed, 80 insertions(+), 28 deletions(-)
+
+--- a/arch/powerpc/mm/numa.c
++++ b/arch/powerpc/mm/numa.c
+@@ -89,6 +89,46 @@ static int __cpuinit fake_numa_create_ne
+       return 0;
+ }
++/*
++ * get_active_region_work_fn - A helper function for get_node_active_region
++ *    Returns datax set to the start_pfn and end_pfn if they contain
++ *    the initial value of datax->start_pfn between them
++ * @start_pfn: start page(inclusive) of region to check
++ * @end_pfn: end page(exclusive) of region to check
++ * @datax: comes in with ->start_pfn set to value to search for and
++ *    goes out with active range if it contains it
++ * Returns 1 if search value is in range else 0
++ */
++static int __init get_active_region_work_fn(unsigned long start_pfn,
++                                      unsigned long end_pfn, void *datax)
++{
++      struct node_active_region *data;
++      data = (struct node_active_region *)datax;
++
++      if (start_pfn <= data->start_pfn && end_pfn > data->start_pfn) {
++              data->start_pfn = start_pfn;
++              data->end_pfn = end_pfn;
++              return 1;
++      }
++      return 0;
++
++}
++
++/*
++ * get_node_active_region - Return active region containing start_pfn
++ * @start_pfn: The page to return the region for.
++ * @node_ar: Returned set to the active region containing start_pfn
++ */
++static void __init get_node_active_region(unsigned long start_pfn,
++                     struct node_active_region *node_ar)
++{
++      int nid = early_pfn_to_nid(start_pfn);
++
++      node_ar->nid = nid;
++      node_ar->start_pfn = start_pfn;
++      work_with_active_regions(nid, get_active_region_work_fn, node_ar);
++}
++
+ static void __cpuinit map_cpu_to_node(int cpu, int node)
+ {
+       numa_cpu_lookup_table[cpu] = node;
+@@ -837,38 +877,50 @@ void __init do_init_bootmem(void)
+                                 start_pfn, end_pfn);
+               free_bootmem_with_active_regions(nid, end_pfn);
++      }
+-              /* Mark reserved regions on this node */
+-              for (i = 0; i < lmb.reserved.cnt; i++) {
+-                      unsigned long physbase = lmb.reserved.region[i].base;
+-                      unsigned long size = lmb.reserved.region[i].size;
+-                      unsigned long start_paddr = start_pfn << PAGE_SHIFT;
+-                      unsigned long end_paddr = end_pfn << PAGE_SHIFT;
+-
+-                      if (early_pfn_to_nid(physbase >> PAGE_SHIFT) != nid &&
+-                          early_pfn_to_nid((physbase+size-1) >> PAGE_SHIFT) != nid)
+-                              continue;
+-
+-                      if (physbase < end_paddr &&
+-                          (physbase+size) > start_paddr) {
+-                              /* overlaps */
+-                              if (physbase < start_paddr) {
+-                                      size -= start_paddr - physbase;
+-                                      physbase = start_paddr;
+-                              }
+-
+-                              if (size > end_paddr - physbase)
+-                                      size = end_paddr - physbase;
+-
+-                              dbg("reserve_bootmem %lx %lx\n", physbase,
+-                                  size);
+-                              reserve_bootmem_node(NODE_DATA(nid), physbase,
+-                                                   size, BOOTMEM_DEFAULT);
+-                      }
++      /* Mark reserved regions */
++      for (i = 0; i < lmb.reserved.cnt; i++) {
++              unsigned long physbase = lmb.reserved.region[i].base;
++              unsigned long size = lmb.reserved.region[i].size;
++              unsigned long start_pfn = physbase >> PAGE_SHIFT;
++              unsigned long end_pfn = ((physbase + size) >> PAGE_SHIFT);
++              struct node_active_region node_ar;
++
++              get_node_active_region(start_pfn, &node_ar);
++              while (start_pfn < end_pfn) {
++                      /*
++                       * if reserved region extends past active region
++                       * then trim size to active region
++                       */
++                      if (end_pfn > node_ar.end_pfn)
++                              size = (node_ar.end_pfn << PAGE_SHIFT)
++                                      - (start_pfn << PAGE_SHIFT);
++                      dbg("reserve_bootmem %lx %lx nid=%d\n", physbase, size,
++                              node_ar.nid);
++                      reserve_bootmem_node(NODE_DATA(node_ar.nid), physbase,
++                                              size, BOOTMEM_DEFAULT);
++                      /*
++                       * if reserved region is contained in the active region
++                       * then done.
++                       */
++                      if (end_pfn <= node_ar.end_pfn)
++                              break;
++
++                      /*
++                       * reserved region extends past the active region
++                       *   get next active region that contains this
++                       *   reserved region
++                       */
++                      start_pfn = node_ar.end_pfn;
++                      physbase = start_pfn << PAGE_SHIFT;
++                      get_node_active_region(start_pfn, &node_ar);
+               }
+-              sparse_memory_present_with_active_regions(nid);
+       }
++
++      for_each_online_node(nid)
++              sparse_memory_present_with_active_regions(nid);
+ }
+ void __init paging_init(void)
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:22 2008
+Message-Id: <20081104232322.481201031@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:13 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jon Tollefson <kniht@linux.vnet.ibm.com>,
+ Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Subject: [patch 29/57] powerpc/numa: Make memory reserve code more robust
+Content-Disposition: inline; filename=powerpc-numa-make-memory-reserve-code-more-robust.patch
+Content-Length: 2488
+Lines: 71
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jon Tollefson <kniht@us.ibm.com>
+
+commit e81703724a966120ace6504c993bda9e084cbf3e upstream.
+
+Adjust amount to reserve based on previous nodes for reserves spanning
+multiple nodes. Check if the node active range is empty before attempting
+to pass the reserve to bootmem.  In practice the range shouldn't be empty,
+but to be sure we check.
+
+Signed-off-by: Jon Tollefson <kniht@linux.vnet.ibm.com>
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/powerpc/mm/numa.c |   15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+--- a/arch/powerpc/mm/numa.c
++++ b/arch/powerpc/mm/numa.c
+@@ -116,6 +116,7 @@ static int __init get_active_region_work
+ /*
+  * get_node_active_region - Return active region containing start_pfn
++ * Active range returned is empty if none found.
+  * @start_pfn: The page to return the region for.
+  * @node_ar: Returned set to the active region containing start_pfn
+  */
+@@ -126,6 +127,7 @@ static void __init get_node_active_regio
+       node_ar->nid = nid;
+       node_ar->start_pfn = start_pfn;
++      node_ar->end_pfn = start_pfn;
+       work_with_active_regions(nid, get_active_region_work_fn, node_ar);
+ }
+@@ -888,18 +890,20 @@ void __init do_init_bootmem(void)
+               struct node_active_region node_ar;
+               get_node_active_region(start_pfn, &node_ar);
+-              while (start_pfn < end_pfn) {
++              while (start_pfn < end_pfn &&
++                      node_ar.start_pfn < node_ar.end_pfn) {
++                      unsigned long reserve_size = size;
+                       /*
+                        * if reserved region extends past active region
+                        * then trim size to active region
+                        */
+                       if (end_pfn > node_ar.end_pfn)
+-                              size = (node_ar.end_pfn << PAGE_SHIFT)
++                              reserve_size = (node_ar.end_pfn << PAGE_SHIFT)
+                                       - (start_pfn << PAGE_SHIFT);
+-                      dbg("reserve_bootmem %lx %lx nid=%d\n", physbase, size,
+-                              node_ar.nid);
++                      dbg("reserve_bootmem %lx %lx nid=%d\n", physbase,
++                              reserve_size, node_ar.nid);
+                       reserve_bootmem_node(NODE_DATA(node_ar.nid), physbase,
+-                                              size, BOOTMEM_DEFAULT);
++                                              reserve_size, BOOTMEM_DEFAULT);
+                       /*
+                        * if reserved region is contained in the active region
+                        * then done.
+@@ -914,6 +918,7 @@ void __init do_init_bootmem(void)
+                        */
+                       start_pfn = node_ar.end_pfn;
+                       physbase = start_pfn << PAGE_SHIFT;
++                      size = size - reserve_size;
+                       get_node_active_region(start_pfn, &node_ar);
+               }
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:22 2008
+Message-Id: <20081104232322.681989038@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:14 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jon Tollefson <kniht@linux.vnet.ibm.com>,
+ Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Subject: [patch 30/57] powerpc: Dont use a 16G page if beyond mem= limits
+Content-Disposition: inline; filename=powerpc-don-t-use-a-16g-page-if-beyond-mem-limits.patch
+Content-Length: 1219
+Lines: 33
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jon Tollefson <kniht@us.ibm.com>
+
+commit 4792adbac9eb41cea77a45ab76258ea10d411173 upstream
+
+If mem= is used on the boot command line to limit memory then the memory block where a 16G page resides may not be available.
+
+Thanks to Michael Ellerman for finding the problem.
+
+Signed-off-by: Jon Tollefson <kniht@linux.vnet.ibm.com>
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/powerpc/mm/hash_utils_64.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/arch/powerpc/mm/hash_utils_64.c
++++ b/arch/powerpc/mm/hash_utils_64.c
+@@ -381,8 +381,10 @@ static int __init htab_dt_scan_hugepage_
+       printk(KERN_INFO "Huge page(16GB) memory: "
+                       "addr = 0x%lX size = 0x%lX pages = %d\n",
+                       phys_addr, block_size, expected_pages);
+-      lmb_reserve(phys_addr, block_size * expected_pages);
+-      add_gpage(phys_addr, block_size, expected_pages);
++      if (phys_addr + (16 * GB) <= lmb_end_of_DRAM()) {
++              lmb_reserve(phys_addr, block_size * expected_pages);
++              add_gpage(phys_addr, block_size, expected_pages);
++      }
+       return 0;
+ }
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:22 2008
+Message-Id: <20081104232322.819327166@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:15 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jean Delvare <khali@linux-fr.org>
+Subject: [patch 31/57] i2c: The i2c mailing list is moving
+Content-Disposition: inline; filename=i2c-the-i2c-mailing-list-is-moving.patch
+Content-Length: 3273
+Lines: 121
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jean Delvare <khali@linux-fr.org>
+
+commit 846557d3ceb6c7493e090921db5d6158ec237228 upstream
+
+Replace all references to the old i2c mailing list.
+
+This isn't a bug fix, but I would hate to miss bug reports because
+they're sent to a dead mailing list.
+
+Signed-off-by: Jean Delvare <khali@linux-fr.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ Documentation/i2c/busses/i2c-sis96x |    2 +-
+ MAINTAINERS                         |   20 ++++++++++----------
+ 2 files changed, 11 insertions(+), 11 deletions(-)
+
+--- a/Documentation/i2c/busses/i2c-sis96x
++++ b/Documentation/i2c/busses/i2c-sis96x
+@@ -42,7 +42,7 @@ I suspect that this driver could be made
+ chipsets as well: 635, and 635T. If anyone owns a board with those chips
+ AND is willing to risk crashing & burning an otherwise well-behaved kernel
+ in the name of progress... please contact me at <mhoffman@lightlink.com> or
+-via the project's mailing list: <i2c@lm-sensors.org>.  Please send bug
++via the linux-i2c mailing list: <linux-i2c@vger.kernel.org>.  Please send bug
+ reports and/or success stories as well.
+--- a/MAINTAINERS
++++ b/MAINTAINERS
+@@ -360,7 +360,7 @@ S: Maintained
+ ALI1563 I2C DRIVER
+ P:    Rudolf Marek
+ M:    r.marek@assembler.cz
+-L:    i2c@lm-sensors.org
++L:    linux-i2c@vger.kernel.org
+ S:    Maintained
+ ALPHA PORT
+@@ -1681,7 +1681,7 @@ FREESCALE I2C CPM DRIVER
+ P:    Jochen Friedrich
+ M:    jochen@scram.de
+ L:    linuxppc-dev@ozlabs.org
+-L:    i2c@lm-sensors.org
++L:    linux-i2c@vger.kernel.org
+ S:    Maintained
+ FREESCALE SOC FS_ENET DRIVER
+@@ -1982,7 +1982,7 @@ S:       Maintained
+ I2C/SMBUS STUB DRIVER
+ P:    Mark M. Hoffman
+ M:    mhoffman@lightlink.com
+-L:    i2c@lm-sensors.org
++L:    linux-i2c@vger.kernel.org
+ S:    Maintained
+ I2C SUBSYSTEM
+@@ -1990,14 +1990,14 @@ P:     Jean Delvare (PC drivers, core)
+ M:    khali@linux-fr.org
+ P:    Ben Dooks (embedded platforms)
+ M:    ben-linux@fluff.org
+-L:    i2c@lm-sensors.org
++L:    linux-i2c@vger.kernel.org
+ T:    quilt http://khali.linux-fr.org/devel/linux-2.6/jdelvare-i2c/
+ S:    Maintained
+ I2C-TINY-USB DRIVER
+ P:    Till Harbaum
+ M:    till@harbaum.org
+-L:    i2c@lm-sensors.org
++L:    linux-i2c@vger.kernel.org
+ T:    http://www.harbaum.org/till/i2c_tiny_usb
+ S:    Maintained
+@@ -3070,7 +3070,7 @@ S:       Maintained
+ OPENCORES I2C BUS DRIVER
+ P:    Peter Korsgaard
+ M:    jacmet@sunsite.dk
+-L:    i2c@lm-sensors.org
++L:    linux-i2c@vger.kernel.org
+ S:    Maintained
+ ORACLE CLUSTER FILESYSTEM 2 (OCFS2)
+@@ -3144,7 +3144,7 @@ S:       Maintained
+ PA SEMI SMBUS DRIVER
+ P:    Olof Johansson
+ M:    olof@lixom.net
+-L:    i2c@lm-sensors.org
++L:    linux-i2c@vger.kernel.org
+ S:    Maintained
+ PARALLEL PORT SUPPORT
+@@ -3280,7 +3280,7 @@ S:       Maintained
+ PNXxxxx I2C DRIVER
+ P:    Vitaly Wool
+ M:    vitalywool@gmail.com
+-L:    i2c@lm-sensors.org
++L:    linux-i2c@vger.kernel.org
+ S:    Maintained
+ PPP PROTOCOL DRIVERS AND COMPRESSORS
+@@ -3725,7 +3725,7 @@ S:       Maintained
+ SIS 96X I2C/SMBUS DRIVER
+ P:    Mark M. Hoffman
+ M:    mhoffman@lightlink.com
+-L:    i2c@lm-sensors.org
++L:    linux-i2c@vger.kernel.org
+ S:    Maintained
+ SIS FRAMEBUFFER DRIVER
+@@ -4445,7 +4445,7 @@ S:       Maintained
+ VIAPRO SMBUS DRIVER
+ P:    Jean Delvare
+ M:    khali@linux-fr.org
+-L:    i2c@lm-sensors.org
++L:    linux-i2c@vger.kernel.org
+ S:    Maintained
+ VIA VELOCITY NETWORK DRIVER
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:23 2008
+Message-Id: <20081104232322.982918778@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:16 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Len Sorensen <lsorense@csclub.uwaterloo.ca>,
+ Jean Delvare <khali@linux-fr.org>
+Subject: [patch 32/57] scx200_i2c: Add missing class parameter
+Content-Disposition: inline; filename=scx200_i2c-add-missing-class-parameter.patch
+Content-Length: 969
+Lines: 30
+
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Lennart Sorensen <lsorense@csclub.uwaterloo.ca>
+
+commit 4a029abee0f1d69cb0445657d6fa5a38597bd17d upstream
+
+The scx200_i2c driver is missing the .class parameter, which means no
+i2c drivers are willing to probe for devices on the bus and attach to
+them.
+
+Signed-off-by: Len Sorensen <lsorense@csclub.uwaterloo.ca>
+Signed-off-by: Jean Delvare <khali@linux-fr.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/i2c/busses/scx200_i2c.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/i2c/busses/scx200_i2c.c
++++ b/drivers/i2c/busses/scx200_i2c.c
+@@ -81,6 +81,7 @@ static struct i2c_algo_bit_data scx200_i
+ static struct i2c_adapter scx200_i2c_ops = {
+       .owner             = THIS_MODULE,
++      .class             = I2C_CLASS_HWMON | I2C_CLASS_SPD,
+       .id                = I2C_HW_B_SCX200,
+       .algo_data         = &scx200_i2c_data,
+       .name   = "NatSemi SCx200 I2C",
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:23 2008
+Message-Id: <20081104232323.155870147@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:17 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Takashi Iwai <tiwai@suse.de>,
+ Jaroslav Kysela <perex@perex.cz>,
+ Chris Wedgwood <cw@f00f.org>
+Subject: [patch 33/57] ALSA: use correct lock in snd_ctl_dev_disconnect()
+Content-Disposition: inline; filename=alsa-use-correct-lock-in-snd_ctl_dev_disconnect.patch
+Content-Length: 1254
+Lines: 36
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Takashi Iwai <tiwai@suse.de>
+
+commit d8009882e9f5e1a76986c741f071edd2ad760c97 upstream
+
+The lock used in snd_ctl_dev_disconnect() should be card->ctl_files_rwlock
+for protection of card->ctl_files entries, instead of card->controls_rwsem.
+
+Reported-by: Vegard Nossum <vegard.nossum@gmail.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Jaroslav Kysela <perex@perex.cz>
+Cc: Chris Wedgwood <cw@f00f.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/core/control.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/sound/core/control.c
++++ b/sound/core/control.c
+@@ -1427,12 +1427,12 @@ static int snd_ctl_dev_disconnect(struct
+       cardnum = card->number;
+       snd_assert(cardnum >= 0 && cardnum < SNDRV_CARDS, return -ENXIO);
+-      down_read(&card->controls_rwsem);
++      read_lock(&card->ctl_files_rwlock);
+       list_for_each_entry(ctl, &card->ctl_files, list) {
+               wake_up(&ctl->change_sleep);
+               kill_fasync(&ctl->fasync, SIGIO, POLL_ERR);
+       }
+-      up_read(&card->controls_rwsem);
++      read_unlock(&card->ctl_files_rwlock);
+       if ((err = snd_unregister_device(SNDRV_DEVICE_TYPE_CONTROL,
+                                        card, -1)) < 0)
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:23 2008
+Message-Id: <20081104232323.311316441@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:18 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Boris Dores <babal@via.ecp.fr>,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Mike Isely <isely@pobox.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [patch 34/57] V4L: pvrusb2: Keep MPEG PTSs from drifting away
+Content-Disposition: inline; filename=v4l-pvrusb2-keep-mpeg-ptss-from-drifting-away.patch
+Content-Length: 1145
+Lines: 34
+
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Boris Dores <babal@via.ecp.fr>
+
+cherry picked from commit 3f93d1adca658201c64251c43a147cc79d468c3f
+
+V4L: pvrusb2: Keep MPEG PTSs from drifting away
+
+This change was empirically figured out by Boris Dores after
+empirically comparing against behavior in the Windows driver.
+
+Signed-off-by: Mike Isely <isely@pobox.com>
+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/pvrusb2/pvrusb2-encoder.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/media/video/pvrusb2/pvrusb2-encoder.c
++++ b/drivers/media/video/pvrusb2/pvrusb2-encoder.c
+@@ -402,6 +402,10 @@ static int pvr2_encoder_prep_config(stru
+       ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC,4, 0,3,0,0);
+       ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC,4,15,0,0,0);
++      /* prevent the PTSs from slowly drifting away in the generated
++         MPEG stream */
++      ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC, 2, 4, 1);
++
+       return ret;
+ }
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:23 2008
+Message-Id: <20081104232323.474028821@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:19 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Steven Toth <stoth@linuxtv.org>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [patch 35/57] DVB: s5h1411: bugfix: Setting serial or parallel mode could destroy bits
+Content-Disposition: inline; filename=dvb-s5h1411-bugfix-setting-serial-or-parallel-mode-could-destroy-bits.patch
+Content-Length: 1847
+Lines: 55
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Steven Toth <stoth@linuxtv.org>
+
+cherry picked from commit 1af46b450fa49c57d73764d66f267335ccd807e2
+
+DVB: s5h1411: bugfix: Setting serial or parallel mode could destroy bits
+
+Adding a serialmode function to read/and/or/write the register for safety.
+
+Signed-off-by: Steven Toth <stoth@linuxtv.org>
+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/dvb/frontends/s5h1411.c |   18 ++++++++++++++++--
+ 1 file changed, 16 insertions(+), 2 deletions(-)
+
+--- a/drivers/media/dvb/frontends/s5h1411.c
++++ b/drivers/media/dvb/frontends/s5h1411.c
+@@ -471,6 +471,20 @@ static int s5h1411_set_spectralinversion
+       return s5h1411_writereg(state, S5H1411_I2C_TOP_ADDR, 0x24, val);
+ }
++static int s5h1411_set_serialmode(struct dvb_frontend *fe, int serial)
++{
++      struct s5h1411_state *state = fe->demodulator_priv;
++      u16 val;
++
++      dprintk("%s(%d)\n", __func__, serial);
++      val = s5h1411_readreg(state, S5H1411_I2C_TOP_ADDR, 0xbd) & ~0x100;
++
++      if (serial == 1)
++              val |= 0x100;
++
++      return s5h1411_writereg(state, S5H1411_I2C_TOP_ADDR, 0xbd, val);
++}
++
+ static int s5h1411_enable_modulation(struct dvb_frontend *fe,
+                                    fe_modulation_t m)
+ {
+@@ -612,10 +626,10 @@ static int s5h1411_init(struct dvb_front
+       if (state->config->output_mode == S5H1411_SERIAL_OUTPUT)
+               /* Serial */
+-              s5h1411_writereg(state, S5H1411_I2C_TOP_ADDR, 0xbd, 0x1101);
++              s5h1411_set_serialmode(fe, 1);
+       else
+               /* Parallel */
+-              s5h1411_writereg(state, S5H1411_I2C_TOP_ADDR, 0xbd, 0x1001);
++              s5h1411_set_serialmode(fe, 0);
+       s5h1411_set_spectralinversion(fe, state->config->inversion);
+       s5h1411_set_if_freq(fe, state->config->vsb_if);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:23 2008
+Message-Id: <20081104232323.644532814@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:20 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Steven Toth <stoth@linuxtv.org>,
+ Devin Heitmueller <devin.heitmueller@gmail.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [patch 36/57] DVB: s5h1411: Perform s5h1411 soft reset after tuning
+Content-Disposition: inline; filename=dvb-s5h1411-perform-s5h1411-soft-reset-after-tuning.patch
+Content-Length: 1516
+Lines: 47
+
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Devin Heitmueller <devin.heitmueller@gmail.com>
+
+cherry picked from commit f0d041e50bc6c8a677922d72b010f80af9b23b18
+
+DVB: s5h1411: Perform s5h1411 soft reset after tuning
+
+If you instruct the tuner to change frequencies, it can take up to 2500ms to
+get a demod lock.  By performing a soft reset after the tuning call (which
+is consistent with how the Pinnacle 801e Windows driver behaves), you get
+a demod lock inside of 300ms
+
+Signed-off-by: Devin Heitmueller <devin.heitmueller@gmail.com>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Acked-by: Steven Toth <stoth@linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/dvb/frontends/s5h1411.c |    7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- a/drivers/media/dvb/frontends/s5h1411.c
++++ b/drivers/media/dvb/frontends/s5h1411.c
+@@ -588,9 +588,6 @@ static int s5h1411_set_frontend(struct d
+       s5h1411_enable_modulation(fe, p->u.vsb.modulation);
+-      /* Allow the demod to settle */
+-      msleep(100);
+-
+       if (fe->ops.tuner_ops.set_params) {
+               if (fe->ops.i2c_gate_ctrl)
+                       fe->ops.i2c_gate_ctrl(fe, 1);
+@@ -601,6 +598,10 @@ static int s5h1411_set_frontend(struct d
+                       fe->ops.i2c_gate_ctrl(fe, 0);
+       }
++      /* Issue a reset to the demod so it knows to resync against the
++         newly tuned frequency */
++      s5h1411_softreset(fe);
++
+       return 0;
+ }
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:23 2008
+Message-Id: <20081104232323.814985552@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:21 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ v4l-dvb maintainer list <v4l-dvb-maintainer@linuxtv.org>,
+ Steven Toth <stoth@linuxtv.org>,
+ Devin Heitmueller <devin.heitmueller@gmail.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [patch 37/57] DVB: s5h1411: Power down s5h1411 when not in use
+Content-Disposition: inline; filename=dvb-s5h1411-power-down-s5h1411-when-not-in-use.patch
+Content-Length: 2015
+Lines: 63
+
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Devin Heitmueller <devin.heitmueller@gmail.com>
+
+cherry picked from commit 11fc9a4a440112b5afc1a99d86ba92d70205a688
+
+DVB: s5h1411: Power down s5h1411 when not in use
+
+Power down the s5h1411 demodulator when not in use
+(on the Pinnacle 801e, this brings idle power from
+123ma down to 84ma).
+
+Signed-off-by: Devin Heitmueller <devin.heitmueller@gmail.com>
+Acked-by: Steven Toth <stoth@linuxtv.org>
+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/dvb/frontends/s5h1411.c |   10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+--- a/drivers/media/dvb/frontends/s5h1411.c
++++ b/drivers/media/dvb/frontends/s5h1411.c
+@@ -549,7 +549,7 @@ static int s5h1411_set_gpio(struct dvb_f
+               return s5h1411_writereg(state, S5H1411_I2C_TOP_ADDR, 0xe0, val);
+ }
+-static int s5h1411_sleep(struct dvb_frontend *fe, int enable)
++static int s5h1411_set_powerstate(struct dvb_frontend *fe, int enable)
+ {
+       struct s5h1411_state *state = fe->demodulator_priv;
+@@ -565,6 +565,11 @@ static int s5h1411_sleep(struct dvb_fron
+       return 0;
+ }
++static int s5h1411_sleep(struct dvb_frontend *fe)
++{
++      return s5h1411_set_powerstate(fe, 1);
++}
++
+ static int s5h1411_register_reset(struct dvb_frontend *fe)
+ {
+       struct s5h1411_state *state = fe->demodulator_priv;
+@@ -614,7 +619,7 @@ static int s5h1411_init(struct dvb_front
+       dprintk("%s()\n", __func__);
+-      s5h1411_sleep(fe, 0);
++      s5h1411_set_powerstate(fe, 0);
+       s5h1411_register_reset(fe);
+       for (i = 0; i < ARRAY_SIZE(init_tab); i++)
+@@ -878,6 +883,7 @@ static struct dvb_frontend_ops s5h1411_o
+       },
+       .init                 = s5h1411_init,
++      .sleep                = s5h1411_sleep,
+       .i2c_gate_ctrl        = s5h1411_i2c_gate_ctrl,
+       .set_frontend         = s5h1411_set_frontend,
+       .get_frontend         = s5h1411_get_frontend,
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:24 2008
+Message-Id: <20081104232323.976542478@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:22 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Peter Chubb <peterc@gelato.unsw.edu.au>,
+ Jesse Barnes <jbarnes@virtuousgeek.org>,
+ Bjorn Helgaas <bjorn.helgaas@hp.com>
+Subject: [patch 38/57] PCI: fix 64-vbit prefetchable memory resource BARs
+Content-Disposition: inline; filename=pci-fix-64-vbit-prefetchable-memory-resource-bars.patch
+Content-Length: 1310
+Lines: 37
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Peter Chubb <peterc@gelato.unsw.edu.au>
+
+commit e354597cce8d219d135d65e585dc4f30323486b9 upstream.
+
+Since patch 6ac665c63dcac8fcec534a1d224ecbb8b867ad59 my infiniband
+controller hasn't worked.  This is because it has 64-bit prefetchable
+memory, which was mistakenly being  taken to be 32-bit memory.  The
+resource flags in this case are PCI_BASE_ADDRESS_MEM_TYPE_64 |
+PCI_BASE_ADDRESS_MEM_PREFETCH.
+
+This patch checks only for the PCI_BASE_ADDRESS_MEM_TYPE_64 bit; thus
+whether the region is prefetchable or not is ignored.  This fixes my
+Infiniband.
+
+Reviewed-by: Matthew Wilcox <matthew@wil.cx>
+Signed-off-by: Peter Chubb <peterc@gelato.unsw.edu.au>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Cc: Bjorn Helgaas <bjorn.helgaas@hp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/pci/probe.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/pci/probe.c
++++ b/drivers/pci/probe.c
+@@ -219,7 +219,7 @@ static inline enum pci_bar_type decode_b
+       res->flags = bar & ~PCI_BASE_ADDRESS_MEM_MASK;
+-      if (res->flags == PCI_BASE_ADDRESS_MEM_TYPE_64)
++      if (res->flags & PCI_BASE_ADDRESS_MEM_TYPE_64)
+               return pci_bar_mem64;
+       return pci_bar_mem32;
+ }
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:24 2008
+Message-Id: <20081104232324.144651614@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:23 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Peter Zijlstra <peterz@infradead.org>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 39/57] sched: disable the hrtick for now
+Content-Disposition: inline; filename=sched-disable-the-hrtick-for-now.patch
+Content-Length: 1070
+Lines: 36
+
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Ingo Molnar <mingo@elte.hu>
+
+commit 0c4b83da58ec2e96ce9c44c211d6eac5f9dae478 upstream
+
+sched: disable the hrtick for now
+
+David Miller reported that hrtick update overhead has tripled the
+wakeup overhead on Sparc64.
+
+That is too much - disable the HRTICK feature for now by default,
+until a faster implementation is found.
+
+Reported-by: David Miller <davem@davemloft.net>
+Acked-by: Peter Zijlstra <peterz@infradead.org>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/sched_features.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/sched_features.h
++++ b/kernel/sched_features.h
+@@ -5,7 +5,7 @@ SCHED_FEAT(START_DEBIT, 1)
+ SCHED_FEAT(AFFINE_WAKEUPS, 1)
+ SCHED_FEAT(CACHE_HOT_BUDDY, 1)
+ SCHED_FEAT(SYNC_WAKEUPS, 1)
+-SCHED_FEAT(HRTICK, 1)
++SCHED_FEAT(HRTICK, 0)
+ SCHED_FEAT(DOUBLE_TICK, 0)
+ SCHED_FEAT(ASYM_GRAN, 1)
+ SCHED_FEAT(LB_BIAS, 1)
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:24 2008
+Message-Id: <20081104232324.301439138@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:24 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Peter Zijlstra <peterz@infradead.org>,
+ Molnar <mingo@elte.hu>,
+ Ingo@hera.kernel.org,
+ Dave Kleikamp <shaggy@linux.vnet.ibm.com>,
+ Peter Zijlstra <a.p.zijlstra@chello.nl>
+Subject: [patch 40/57] sched_clock: prevent scd->clock from moving backwards
+Content-Disposition: inline; filename=sched_clock-prevent-scd-clock-from-moving-backwards.patch
+Content-Length: 1606
+Lines: 45
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Dave Kleikamp <shaggy@linux.vnet.ibm.com>
+
+commit 5b7dba4ff834259a5623e03a565748704a8fe449 upstream
+
+sched_clock: prevent scd->clock from moving backwards
+
+When sched_clock_cpu() couples the clocks between two cpus, it may
+increment scd->clock beyond the GTOD tick window that __update_sched_clock()
+uses to clamp the clock.  A later call to __update_sched_clock() may move
+the clock back to scd->tick_gtod + TICK_NSEC, violating the clock's
+monotonic property.
+
+This patch ensures that scd->clock will not be set backward.
+
+Signed-off-by: Dave Kleikamp <shaggy@linux.vnet.ibm.com>
+Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/sched_clock.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/kernel/sched_clock.c
++++ b/kernel/sched_clock.c
+@@ -118,13 +118,13 @@ static u64 __update_sched_clock(struct s
+       /*
+        * scd->clock = clamp(scd->tick_gtod + delta,
+-       *                    max(scd->tick_gtod, scd->clock),
+-       *                    scd->tick_gtod + TICK_NSEC);
++       *                    max(scd->tick_gtod, scd->clock),
++       *                    max(scd->clock, scd->tick_gtod + TICK_NSEC));
+        */
+       clock = scd->tick_gtod + delta;
+       min_clock = wrap_max(scd->tick_gtod, scd->clock);
+-      max_clock = scd->tick_gtod + TICK_NSEC;
++      max_clock = wrap_max(scd->clock, scd->tick_gtod + TICK_NSEC);
+       clock = wrap_max(clock, min_clock);
+       clock = wrap_min(clock, max_clock);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:24 2008
+Message-Id: <20081104232324.459449593@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:25 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Ingo Molnar <mingo@elte.hu>,
+ David Rientjes <rientjes@google.com>
+Subject: [patch 41/57] x86: avoid dereferencing beyond stack + THREAD_SIZE
+Content-Disposition: inline; filename=x86-avoid-dereferencing-beyond-stack-thread_size.patch
+Content-Length: 1345
+Lines: 39
+
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: David Rientjes <rientjes@google.com>
+
+commit e1e23bb0513520035ec934fa3483507cb6648b7c upstream
+
+x86: avoid dereferencing beyond stack + THREAD_SIZE
+
+It's possible for get_wchan() to dereference past task->stack + THREAD_SIZE
+while iterating through instruction pointers if fp equals the upper boundary,
+causing a kernel panic.
+
+Signed-off-by: David Rientjes <rientjes@google.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/process_64.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/arch/x86/kernel/process_64.c
++++ b/arch/x86/kernel/process_64.c
+@@ -729,12 +729,12 @@ unsigned long get_wchan(struct task_stru
+       if (!p || p == current || p->state==TASK_RUNNING)
+               return 0; 
+       stack = (unsigned long)task_stack_page(p);
+-      if (p->thread.sp < stack || p->thread.sp > stack+THREAD_SIZE)
++      if (p->thread.sp < stack || p->thread.sp >= stack+THREAD_SIZE)
+               return 0;
+       fp = *(u64 *)(p->thread.sp);
+       do { 
+               if (fp < (unsigned long)stack ||
+-                  fp > (unsigned long)stack+THREAD_SIZE)
++                  fp >= (unsigned long)stack+THREAD_SIZE)
+                       return 0; 
+               ip = *(u64 *)(fp+8);
+               if (!in_sched_functions(ip))
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:24 2008
+Message-Id: <20081104232324.618853017@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:26 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ David Brownell <dbrownell@users.sourceforge.net>,
+ Bjorn Helgaas <bjorn.helgaas@hp.com>,
+ "Rafael J. Wysocki" <rjw@sisk.pl>
+Subject: [patch 42/57] rtc-cmos: look for PNP RTC first, then for platform RTC
+Content-Disposition: inline; filename=rtc-cmos-look-for-pnp-rtc-first-then-for-platform-rtc.patch
+Content-Length: 2704
+Lines: 91
+
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Bjorn Helgaas <bjorn.helgaas@hp.com>
+
+commit 72f22b1eb6ca5e4676a632a04d40d46cb61d4562 upstream
+
+rtc-cmos: look for PNP RTC first, then for platform RTC
+
+We shouldn't rely on "pnp_platform_devices" to tell us whether there
+is a PNP RTC device.
+
+I introduced "pnp_platform_devices", but I think it was a mistake.
+All it tells us is whether we found any PNPBIOS or PNPACPI devices.
+Many machines have some PNP devices, but do not describe the RTC
+via PNP.  On those machines, we need to do the platform driver probe
+to find the RTC.
+
+We should just register the PNP driver and see whether it claims anything.
+If we don't find a PNP RTC, fall back to the platform driver probe.
+
+This (in conjunction with the arch/x86/kernel/rtc.c patch to add
+a platform RTC device when PNP doesn't have one) should resolve
+these issues:
+
+    http://bugzilla.kernel.org/show_bug.cgi?id=11580
+    https://bugzilla.redhat.com/show_bug.cgi?id=451188
+
+Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
+Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
+Acked-by: David Brownell <dbrownell@users.sourceforge.net>
+Reported-by: Rik Theys <rik.theys@esat.kuleuven.be>
+Reported-by: shr_msn@yahoo.com.tw
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/rtc/rtc-cmos.c |   33 ++++++++++++++++++---------------
+ 1 file changed, 18 insertions(+), 15 deletions(-)
+
+--- a/drivers/rtc/rtc-cmos.c
++++ b/drivers/rtc/rtc-cmos.c
+@@ -1030,29 +1030,32 @@ static struct platform_driver cmos_platf
+ static int __init cmos_init(void)
+ {
++      int retval = 0;
++
++#ifdef        CONFIG_PNP
++      pnp_register_driver(&cmos_pnp_driver);
++#endif
++
++      if (!cmos_rtc.dev)
++              retval = platform_driver_probe(&cmos_platform_driver,
++                                             cmos_platform_probe);
++
++      if (retval == 0)
++              return 0;
++
+ #ifdef        CONFIG_PNP
+-      if (pnp_platform_devices)
+-              return pnp_register_driver(&cmos_pnp_driver);
+-      else
+-              return platform_driver_probe(&cmos_platform_driver,
+-                      cmos_platform_probe);
+-#else
+-      return platform_driver_probe(&cmos_platform_driver,
+-                      cmos_platform_probe);
+-#endif /* CONFIG_PNP */
++      pnp_unregister_driver(&cmos_pnp_driver);
++#endif
++      return retval;
+ }
+ module_init(cmos_init);
+ static void __exit cmos_exit(void)
+ {
+ #ifdef        CONFIG_PNP
+-      if (pnp_platform_devices)
+-              pnp_unregister_driver(&cmos_pnp_driver);
+-      else
+-              platform_driver_unregister(&cmos_platform_driver);
+-#else
++      pnp_unregister_driver(&cmos_pnp_driver);
++#endif
+       platform_driver_unregister(&cmos_platform_driver);
+-#endif /* CONFIG_PNP */
+ }
+ module_exit(cmos_exit);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:24 2008
+Message-Id: <20081104232324.778794289@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:27 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Phil Dibowitz <phil@ipom.com>,
+ Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+Subject: [patch 43/57] USB: storage: Avoid I/O errors when issuing SCSI ioctls to JMicron USB/ATA bridge
+Content-Disposition: inline; filename=usb-storage-avoid-i-o-errors-when-issuing-scsi-ioctls-to-jmicron-usb-ata-bridge.patch
+Content-Length: 2149
+Lines: 56
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Phil Dibowitz <phil@ipom.com>
+
+commit 3030ca4cf4abbdd2dd850a14d20e9fca5937ffb5 upstream
+
+USB: storage: Avoid I/O errors when issuing SCSI ioctls to JMicron USB/ATA bridge
+
+Here's the patch that implements the fix you suggested to avoid the
+I/O errors that I was running into with my new USB enclosure with a
+JMicron USB/ATA bridge, while issuing scsi-io USN or other such
+queries used by Fedora's mkinitrd.
+http://bugzilla.kernel.org/show_bug.cgi?id=9638#c85
+
+
+/proc/bus/usb/devices:
+T:  Bus=01 Lev=01 Prnt=01 Port=07 Cnt=04 Dev#=  5 Spd=480 MxCh= 0
+D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
+P:  Vendor=152d ProdID=2329 Rev= 1.00
+S:  Manufacturer=JMicron
+S:  Product=USB to ATA/ATAPI Bridge
+S:  SerialNumber=DE5088854FFF
+C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=  2mA
+I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
+E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+
+(patch applied and retested on a modified 2.6.27.2-libre.24.rc1.fc10)
+
+Signed-off-by: Phil Dibowitz <phil@ipom.com>
+Cc: Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/storage/unusual_devs.h |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/drivers/usb/storage/unusual_devs.h
++++ b/drivers/usb/storage/unusual_devs.h
+@@ -1745,6 +1745,15 @@ UNUSUAL_DEV(  0x14cd, 0x6600, 0x0201, 0x
+               US_SC_DEVICE, US_PR_DEVICE, NULL,
+               US_FL_IGNORE_RESIDUE ),
++/* Reported by Alexandre Oliva <oliva@lsd.ic.unicamp.br>
++ * JMicron responds to USN and several other SCSI ioctls with a
++ * residue that causes subsequent I/O requests to fail.  */
++UNUSUAL_DEV(  0x152d, 0x2329, 0x0100, 0x0100,
++              "JMicron",
++              "USB to ATA/ATAPI Bridge",
++              US_SC_DEVICE, US_PR_DEVICE, NULL,
++              US_FL_IGNORE_RESIDUE ),
++
+ /* Reported by Robert Schedel <r.schedel@yahoo.de>
+  * Note: this is a 'super top' device like the above 14cd/6600 device */
+ UNUSUAL_DEV(  0x1652, 0x6600, 0x0201, 0x0201,
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:25 2008
+Message-Id: <20081104232324.943633265@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:28 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ David Brownell <dbrownell@users.sourceforge.net>,
+ Bjorn Helgaas <bjorn.helgaas@hp.com>,
+ "Rafael J. Wysocki" <rjw@sisk.pl>
+Subject: [patch 44/57] x86: register a platform RTC device if PNP doesnt describe it
+Content-Disposition: inline; filename=x86-register-a-platform-rtc-device-if-pnp-doesn-t-describe-it.patch
+Content-Length: 2071
+Lines: 65
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Bjorn Helgaas <bjorn.helgaas@hp.com>
+
+commit 758a7f7bb86b520aadc484f23da85e547b3bf3d8 upstream
+
+x86: register a platform RTC device if PNP doesn't describe it
+
+Most if not all x86 platforms have an RTC device, but sometimes the RTC
+is not exposed as a PNP0b00/PNP0b01/PNP0b02 device in PNPBIOS or ACPI:
+
+    http://bugzilla.kernel.org/show_bug.cgi?id=11580
+    https://bugzilla.redhat.com/show_bug.cgi?id=451188
+
+It's best if we can discover the RTC via PNP because then we know
+which flavor of device it is, where it lives, and which IRQ it uses.
+
+But if we can't, we should register a platform device using the
+compiled-in RTC_PORT/RTC_IRQ resource assumptions.
+
+Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
+Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
+Acked-by: David Brownell <dbrownell@users.sourceforge.net>
+Reported-by: Rik Theys <rik.theys@esat.kuleuven.be>
+Reported-by: shr_msn@yahoo.com.tw
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/rtc.c |   22 ++++++++++++++++++----
+ 1 file changed, 18 insertions(+), 4 deletions(-)
+
+--- a/arch/x86/kernel/rtc.c
++++ b/arch/x86/kernel/rtc.c
+@@ -223,11 +223,25 @@ static struct platform_device rtc_device
+ static __init int add_rtc_cmos(void)
+ {
+ #ifdef CONFIG_PNP
+-      if (!pnp_platform_devices)
+-              platform_device_register(&rtc_device);
+-#else
++      static const char *ids[] __initconst =
++          { "PNP0b00", "PNP0b01", "PNP0b02", };
++      struct pnp_dev *dev;
++      struct pnp_id *id;
++      int i;
++
++      pnp_for_each_dev(dev) {
++              for (id = dev->id; id; id = id->next) {
++                      for (i = 0; i < ARRAY_SIZE(ids); i++) {
++                              if (compare_pnp_id(id, ids[i]) != 0)
++                                      return 0;
++                      }
++              }
++      }
++#endif
++
+       platform_device_register(&rtc_device);
+-#endif /* CONFIG_PNP */
++      dev_info(&rtc_device.dev,
++               "registered platform RTC device (no PNP device found)\n");
+       return 0;
+ }
+ device_initcall(add_rtc_cmos);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:25 2008
+Message-Id: <20081104232325.109638649@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:29 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Mikael Pettersson <mikpe@it.uu.se>,
+ Jeff Garzik <jgarzik@redhat.com>
+Subject: [patch 45/57] sata_promise: add ATA engine reset to reset ops
+Content-Disposition: inline; filename=sata_promise-add-ata-engine-reset-to-reset-ops.patch
+Content-Length: 2945
+Lines: 79
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Mikael Pettersson <mikpe@it.uu.se>
+
+commit cadef677e4a9b9c1d069675043767df486782986 upstream
+
+Promise ATA engines need to be reset when errors occur.
+That's currently done for errors detected by sata_promise itself,
+but it's not done for errors like timeouts detected outside of
+the low-level driver.
+
+The effect of this omission is that a timeout tends to result
+in a sequence of failed COMRESETs after which libata EH gives
+up and disables the port. At that point the port's ATA engine
+hangs and even reloading the driver will not resume it.
+
+To fix this, make sata_promise override ->hardreset on SATA
+ports with code which calls pdc_reset_port() on the port in
+question before calling libata's hardreset. PATA ports don't
+use ->hardreset, so for those we override ->softreset instead.
+
+Signed-off-by: Mikael Pettersson <mikpe@it.uu.se>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ata/sata_promise.c |   20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+--- a/drivers/ata/sata_promise.c
++++ b/drivers/ata/sata_promise.c
+@@ -153,6 +153,10 @@ static void pdc_freeze(struct ata_port *
+ static void pdc_sata_freeze(struct ata_port *ap);
+ static void pdc_thaw(struct ata_port *ap);
+ static void pdc_sata_thaw(struct ata_port *ap);
++static int pdc_pata_softreset(struct ata_link *link, unsigned int *class,
++                            unsigned long deadline);
++static int pdc_sata_hardreset(struct ata_link *link, unsigned int *class,
++                            unsigned long deadline);
+ static void pdc_error_handler(struct ata_port *ap);
+ static void pdc_post_internal_cmd(struct ata_queued_cmd *qc);
+ static int pdc_pata_cable_detect(struct ata_port *ap);
+@@ -186,6 +190,7 @@ static struct ata_port_operations pdc_sa
+       .scr_read               = pdc_sata_scr_read,
+       .scr_write              = pdc_sata_scr_write,
+       .port_start             = pdc_sata_port_start,
++      .hardreset              = pdc_sata_hardreset,
+ };
+ /* First-generation chips need a more restrictive ->check_atapi_dma op */
+@@ -200,6 +205,7 @@ static struct ata_port_operations pdc_pa
+       .freeze                 = pdc_freeze,
+       .thaw                   = pdc_thaw,
+       .port_start             = pdc_common_port_start,
++      .softreset              = pdc_pata_softreset,
+ };
+ static const struct ata_port_info pdc_port_info[] = {
+@@ -691,6 +697,20 @@ static void pdc_sata_thaw(struct ata_por
+       readl(host_mmio + hotplug_offset); /* flush */
+ }
++static int pdc_pata_softreset(struct ata_link *link, unsigned int *class,
++                            unsigned long deadline)
++{
++      pdc_reset_port(link->ap);
++      return ata_sff_softreset(link, class, deadline);
++}
++
++static int pdc_sata_hardreset(struct ata_link *link, unsigned int *class,
++                            unsigned long deadline)
++{
++      pdc_reset_port(link->ap);
++      return sata_sff_hardreset(link, class, deadline);
++}
++
+ static void pdc_error_handler(struct ata_port *ap)
+ {
+       if (!(ap->pflags & ATA_PFLAG_FROZEN))
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:25 2008
+Message-Id: <20081104232325.303788739@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:30 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Tejun Heo <tj@kernel.org>,
+ Jeff Garzik <jgarzik@redhat.com>
+Subject: [patch 46/57] sata_nv: fix generic, nf2/3 detection regression
+Content-Disposition: inline; filename=sata_nv-fix-generic-nf2-3-detection-regression.patch
+Content-Length: 5029
+Lines: 146
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Tejun Heo <tj@kernel.org>
+
+commit 3c324283e6cdb79210cf7975c3e40d3ba3e672b2 upstream
+
+All three flavors of sata_nv's are different in how their hardreset
+behaves.
+
+* generic: Hardreset is not reliable.  Link often doesn't come online
+  after hardreset.
+
+* nf2/3: A little bit better - link comes online with longer debounce
+  timing.  However, nf2/3 can't reliable wait for the first D2H
+  Register FIS, so it can't wait for device readiness or classify the
+  device after hardreset.  Follow-up SRST required.
+
+* ck804: Hardreset finally works.
+
+The core layer change to prefer hardreset and follow up changes
+exposed the above issues and caused various detection regressions for
+all three flavors.  This patch, hopefully, fixes all the known issues
+and should make sata_nv error handling more reliable.
+
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ata/sata_nv.c |   53 +++++++++++++++++++++++---------------------------
+ 1 file changed, 25 insertions(+), 28 deletions(-)
+
+--- a/drivers/ata/sata_nv.c
++++ b/drivers/ata/sata_nv.c
+@@ -307,10 +307,10 @@ static int nv_scr_write(struct ata_port 
+ static void nv_nf2_freeze(struct ata_port *ap);
+ static void nv_nf2_thaw(struct ata_port *ap);
++static int nv_nf2_hardreset(struct ata_link *link, unsigned int *class,
++                          unsigned long deadline);
+ static void nv_ck804_freeze(struct ata_port *ap);
+ static void nv_ck804_thaw(struct ata_port *ap);
+-static int nv_hardreset(struct ata_link *link, unsigned int *class,
+-                      unsigned long deadline);
+ static int nv_adma_slave_config(struct scsi_device *sdev);
+ static int nv_adma_check_atapi_dma(struct ata_queued_cmd *qc);
+ static void nv_adma_qc_prep(struct ata_queued_cmd *qc);
+@@ -405,17 +405,8 @@ static struct scsi_host_template nv_swnc
+       .slave_configure        = nv_swncq_slave_config,
+ };
+-/* OSDL bz3352 reports that some nv controllers can't determine device
+- * signature reliably and nv_hardreset is implemented to work around
+- * the problem.  This was reported on nf3 and it's unclear whether any
+- * other controllers are affected.  However, the workaround has been
+- * applied to all variants and there isn't much to gain by trying to
+- * find out exactly which ones are affected at this point especially
+- * because NV has moved over to ahci for newer controllers.
+- */
+ static struct ata_port_operations nv_common_ops = {
+       .inherits               = &ata_bmdma_port_ops,
+-      .hardreset              = nv_hardreset,
+       .scr_read               = nv_scr_read,
+       .scr_write              = nv_scr_write,
+ };
+@@ -429,12 +420,22 @@ static struct ata_port_operations nv_gen
+       .hardreset              = ATA_OP_NULL,
+ };
++/* OSDL bz3352 reports that nf2/3 controllers can't determine device
++ * signature reliably.  Also, the following thread reports detection
++ * failure on cold boot with the standard debouncing timing.
++ *
++ * http://thread.gmane.org/gmane.linux.ide/34098
++ *
++ * Debounce with hotplug timing and request follow-up SRST.
++ */
+ static struct ata_port_operations nv_nf2_ops = {
+       .inherits               = &nv_common_ops,
+       .freeze                 = nv_nf2_freeze,
+       .thaw                   = nv_nf2_thaw,
++      .hardreset              = nv_nf2_hardreset,
+ };
++/* CK804 finally gets hardreset right */
+ static struct ata_port_operations nv_ck804_ops = {
+       .inherits               = &nv_common_ops,
+       .freeze                 = nv_ck804_freeze,
+@@ -443,7 +444,7 @@ static struct ata_port_operations nv_ck8
+ };
+ static struct ata_port_operations nv_adma_ops = {
+-      .inherits               = &nv_common_ops,
++      .inherits               = &nv_ck804_ops,
+       .check_atapi_dma        = nv_adma_check_atapi_dma,
+       .sff_tf_read            = nv_adma_tf_read,
+@@ -467,7 +468,7 @@ static struct ata_port_operations nv_adm
+ };
+ static struct ata_port_operations nv_swncq_ops = {
+-      .inherits               = &nv_common_ops,
++      .inherits               = &nv_generic_ops,
+       .qc_defer               = ata_std_qc_defer,
+       .qc_prep                = nv_swncq_qc_prep,
+@@ -1553,6 +1554,17 @@ static void nv_nf2_thaw(struct ata_port 
+       iowrite8(mask, scr_addr + NV_INT_ENABLE);
+ }
++static int nv_nf2_hardreset(struct ata_link *link, unsigned int *class,
++                          unsigned long deadline)
++{
++      bool online;
++      int rc;
++
++      rc = sata_link_hardreset(link, sata_deb_timing_hotplug, deadline,
++                               &online, NULL);
++      return online ? -EAGAIN : rc;
++}
++
+ static void nv_ck804_freeze(struct ata_port *ap)
+ {
+       void __iomem *mmio_base = ap->host->iomap[NV_MMIO_BAR];
+@@ -1605,21 +1617,6 @@ static void nv_mcp55_thaw(struct ata_por
+       ata_sff_thaw(ap);
+ }
+-static int nv_hardreset(struct ata_link *link, unsigned int *class,
+-                      unsigned long deadline)
+-{
+-      int rc;
+-
+-      /* SATA hardreset fails to retrieve proper device signature on
+-       * some controllers.  Request follow up SRST.  For more info,
+-       * see http://bugzilla.kernel.org/show_bug.cgi?id=3352
+-       */
+-      rc = sata_sff_hardreset(link, class, deadline);
+-      if (rc)
+-              return rc;
+-      return -EAGAIN;
+-}
+-
+ static void nv_adma_error_handler(struct ata_port *ap)
+ {
+       struct nv_adma_port_priv *pp = ap->private_data;
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:25 2008
+Message-Id: <20081104232325.485611718@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:31 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Alexey Starikovskiy <astarikovskiy@suse.de>,
+ Len Brown <len.brown@intel.com>,
+ "Rafael J. Wysocki" <rjw@sisk.pl>
+Subject: [patch 47/57] ACPI: EC: do transaction from interrupt context
+Content-Disposition: inline; filename=acpi-ec-do-transaction-from-interrupt-context.patch
+Content-Length: 16282
+Lines: 532
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Alexey Starikovskiy <astarikovskiy@suse.de>
+
+commit 7c6db4e050601f359081fde418ca6dc4fc2d0011 upstream.
+
+It is easier and faster to do transaction directly from interrupt context
+rather than waking control thread.
+Also, cleaner GPE storm avoidance is implemented.
+References:    http://bugzilla.kernel.org/show_bug.cgi?id=9998
+               http://bugzilla.kernel.org/show_bug.cgi?id=10724
+               http://bugzilla.kernel.org/show_bug.cgi?id=10919
+               http://bugzilla.kernel.org/show_bug.cgi?id=11309
+               http://bugzilla.kernel.org/show_bug.cgi?id=11549
+
+Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
+Tested-by: Sitsofe Wheeler <sitsofe@yahoo.com>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Cc: Rafael J. Wysocki <rjw@sisk.pl>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/acpi/ec.c |  309 ++++++++++++++++++++++++++----------------------------
+ 1 file changed, 149 insertions(+), 160 deletions(-)
+
+--- a/drivers/acpi/ec.c
++++ b/drivers/acpi/ec.c
+@@ -1,7 +1,7 @@
+ /*
+- *  ec.c - ACPI Embedded Controller Driver (v2.0)
++ *  ec.c - ACPI Embedded Controller Driver (v2.1)
+  *
+- *  Copyright (C) 2006, 2007 Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>
++ *  Copyright (C) 2006-2008 Alexey Starikovskiy <astarikovskiy@suse.de>
+  *  Copyright (C) 2006 Denis Sadykov <denis.m.sadykov@intel.com>
+  *  Copyright (C) 2004 Luming Yu <luming.yu@intel.com>
+  *  Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
+@@ -26,7 +26,7 @@
+  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  */
+-/* Uncomment next line to get verbose print outs*/
++/* Uncomment next line to get verbose printout */
+ /* #define DEBUG */
+ #include <linux/kernel.h>
+@@ -38,6 +38,7 @@
+ #include <linux/seq_file.h>
+ #include <linux/interrupt.h>
+ #include <linux/list.h>
++#include <linux/spinlock.h>
+ #include <asm/io.h>
+ #include <acpi/acpi_bus.h>
+ #include <acpi/acpi_drivers.h>
+@@ -65,22 +66,21 @@ enum ec_command {
+       ACPI_EC_COMMAND_QUERY = 0x84,
+ };
+-/* EC events */
+-enum ec_event {
+-      ACPI_EC_EVENT_OBF_1 = 1,        /* Output buffer full */
+-      ACPI_EC_EVENT_IBF_0,            /* Input buffer empty */
+-};
+-
+ #define ACPI_EC_DELAY         500     /* Wait 500ms max. during EC ops */
+ #define ACPI_EC_UDELAY_GLK    1000    /* Wait 1ms max. to get global lock */
+ #define ACPI_EC_UDELAY                100     /* Wait 100us before polling EC again */
++#define ACPI_EC_STORM_THRESHOLD 20    /* number of false interrupts
++                                         per one transaction */
++
+ enum {
+-      EC_FLAGS_WAIT_GPE = 0,          /* Don't check status until GPE arrives */
+       EC_FLAGS_QUERY_PENDING,         /* Query is pending */
+-      EC_FLAGS_GPE_MODE,              /* Expect GPE to be sent for status change */
++      EC_FLAGS_GPE_MODE,              /* Expect GPE to be sent
++                                       * for status change */
+       EC_FLAGS_NO_GPE,                /* Don't use GPE mode */
+-      EC_FLAGS_RESCHEDULE_POLL        /* Re-schedule poll */
++      EC_FLAGS_GPE_STORM,             /* GPE storm detected */
++      EC_FLAGS_HANDLERS_INSTALLED     /* Handlers for GPE and
++                                       * OpReg are installed */
+ };
+ /* If we find an EC via the ECDT, we need to keep a ptr to its context */
+@@ -95,6 +95,14 @@ struct acpi_ec_query_handler {
+       u8 query_bit;
+ };
++struct transaction_data {
++      const u8 *wdata;
++      u8 *rdata;
++      unsigned short irq_count;
++      u8 wlen;
++      u8 rlen;
++};
++
+ static struct acpi_ec {
+       acpi_handle handle;
+       unsigned long gpe;
+@@ -105,9 +113,8 @@ static struct acpi_ec {
+       struct mutex lock;
+       wait_queue_head_t wait;
+       struct list_head list;
+-      struct delayed_work work;
+-      atomic_t irq_count;
+-      u8 handlers_installed;
++      struct transaction_data *t;
++      spinlock_t t_lock;
+ } *boot_ec, *first_ec;
+ /* 
+@@ -150,7 +157,7 @@ static inline u8 acpi_ec_read_data(struc
+ {
+       u8 x = inb(ec->data_addr);
+       pr_debug(PREFIX "---> data = 0x%2.2x\n", x);
+-      return inb(ec->data_addr);
++      return x;
+ }
+ static inline void acpi_ec_write_cmd(struct acpi_ec *ec, u8 command)
+@@ -165,68 +172,79 @@ static inline void acpi_ec_write_data(st
+       outb(data, ec->data_addr);
+ }
+-static inline int acpi_ec_check_status(struct acpi_ec *ec, enum ec_event event)
++static int ec_transaction_done(struct acpi_ec *ec)
+ {
+-      if (test_bit(EC_FLAGS_WAIT_GPE, &ec->flags))
+-              return 0;
+-      if (event == ACPI_EC_EVENT_OBF_1) {
+-              if (acpi_ec_read_status(ec) & ACPI_EC_FLAG_OBF)
+-                      return 1;
+-      } else if (event == ACPI_EC_EVENT_IBF_0) {
+-              if (!(acpi_ec_read_status(ec) & ACPI_EC_FLAG_IBF))
+-                      return 1;
+-      }
+-
+-      return 0;
++      unsigned long flags;
++      int ret = 0;
++      spin_lock_irqsave(&ec->t_lock, flags);
++      if (!ec->t || (!ec->t->wlen && !ec->t->rlen))
++              ret = 1;
++      spin_unlock_irqrestore(&ec->t_lock, flags);
++      return ret;
+ }
+-static void ec_schedule_ec_poll(struct acpi_ec *ec)
++static void gpe_transaction(struct acpi_ec *ec, u8 status)
+ {
+-      if (test_bit(EC_FLAGS_RESCHEDULE_POLL, &ec->flags))
+-              schedule_delayed_work(&ec->work,
+-                                    msecs_to_jiffies(ACPI_EC_DELAY));
++      unsigned long flags;
++      spin_lock_irqsave(&ec->t_lock, flags);
++      if (!ec->t)
++              goto unlock;
++      if (ec->t->wlen > 0) {
++              if ((status & ACPI_EC_FLAG_IBF) == 0) {
++                      acpi_ec_write_data(ec, *(ec->t->wdata++));
++                      --ec->t->wlen;
++              } else
++                      /* false interrupt, state didn't change */
++                      ++ec->t->irq_count;
++
++      } else if (ec->t->rlen > 0) {
++              if ((status & ACPI_EC_FLAG_OBF) == 1) {
++                      *(ec->t->rdata++) = acpi_ec_read_data(ec);
++                      --ec->t->rlen;
++              } else
++                      /* false interrupt, state didn't change */
++                      ++ec->t->irq_count;
++      }
++unlock:
++      spin_unlock_irqrestore(&ec->t_lock, flags);
+ }
+-static void ec_switch_to_poll_mode(struct acpi_ec *ec)
++static int acpi_ec_wait(struct acpi_ec *ec)
+ {
++      if (wait_event_timeout(ec->wait, ec_transaction_done(ec),
++                             msecs_to_jiffies(ACPI_EC_DELAY)))
++              return 0;
++      /* missing GPEs, switch back to poll mode */
++      if (printk_ratelimit())
++              pr_info(PREFIX "missing confirmations, "
++                              "switch off interrupt mode.\n");
+       set_bit(EC_FLAGS_NO_GPE, &ec->flags);
+       clear_bit(EC_FLAGS_GPE_MODE, &ec->flags);
+-      acpi_disable_gpe(NULL, ec->gpe, ACPI_NOT_ISR);
+-      set_bit(EC_FLAGS_RESCHEDULE_POLL, &ec->flags);
++      return 1;
+ }
+-static int acpi_ec_wait(struct acpi_ec *ec, enum ec_event event, int force_poll)
++static void acpi_ec_gpe_query(void *ec_cxt);
++
++static int ec_check_sci(struct acpi_ec *ec, u8 state)
+ {
+-      atomic_set(&ec->irq_count, 0);
+-      if (likely(test_bit(EC_FLAGS_GPE_MODE, &ec->flags)) &&
+-          likely(!force_poll)) {
+-              if (wait_event_timeout(ec->wait, acpi_ec_check_status(ec, event),
+-                                     msecs_to_jiffies(ACPI_EC_DELAY)))
+-                      return 0;
+-              clear_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
+-              if (acpi_ec_check_status(ec, event)) {
+-                      /* missing GPEs, switch back to poll mode */
+-                      if (printk_ratelimit())
+-                              pr_info(PREFIX "missing confirmations, "
+-                                              "switch off interrupt mode.\n");
+-                      ec_switch_to_poll_mode(ec);
+-                      ec_schedule_ec_poll(ec);
+-                      return 0;
+-              }
+-      } else {
+-              unsigned long delay = jiffies + msecs_to_jiffies(ACPI_EC_DELAY);
+-              clear_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
+-              while (time_before(jiffies, delay)) {
+-                      if (acpi_ec_check_status(ec, event))
+-                              return 0;
+-                      msleep(1);
+-              }
+-              if (acpi_ec_check_status(ec,event))
++      if (state & ACPI_EC_FLAG_SCI) {
++              if (!test_and_set_bit(EC_FLAGS_QUERY_PENDING, &ec->flags))
++                      return acpi_os_execute(OSL_EC_BURST_HANDLER,
++                              acpi_ec_gpe_query, ec);
++      }
++      return 0;
++}
++
++static int ec_poll(struct acpi_ec *ec)
++{
++      unsigned long delay = jiffies + msecs_to_jiffies(ACPI_EC_DELAY);
++      msleep(1);
++      while (time_before(jiffies, delay)) {
++              gpe_transaction(ec, acpi_ec_read_status(ec));
++              msleep(1);
++              if (ec_transaction_done(ec))
+                       return 0;
+       }
+-      pr_err(PREFIX "acpi_ec_wait timeout, status = 0x%2.2x, event = %s\n",
+-              acpi_ec_read_status(ec),
+-              (event == ACPI_EC_EVENT_OBF_1) ? "\"b0=1\"" : "\"b1=0\"");
+       return -ETIME;
+ }
+@@ -235,45 +253,51 @@ static int acpi_ec_transaction_unlocked(
+                                       u8 * rdata, unsigned rdata_len,
+                                       int force_poll)
+ {
+-      int result = 0;
+-      set_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
++      unsigned long tmp;
++      struct transaction_data t = {.wdata = wdata, .rdata = rdata,
++                                   .wlen = wdata_len, .rlen = rdata_len,
++                                   .irq_count = 0};
++      int ret = 0;
+       pr_debug(PREFIX "transaction start\n");
++      /* disable GPE during transaction if storm is detected */
++      if (test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) {
++              clear_bit(EC_FLAGS_GPE_MODE, &ec->flags);
++              acpi_disable_gpe(NULL, ec->gpe, ACPI_NOT_ISR);
++      }
++      /* start transaction */
++      spin_lock_irqsave(&ec->t_lock, tmp);
++      /* following two actions should be kept atomic */
++      ec->t = &t;
+       acpi_ec_write_cmd(ec, command);
+-      for (; wdata_len > 0; --wdata_len) {
+-              result = acpi_ec_wait(ec, ACPI_EC_EVENT_IBF_0, force_poll);
+-              if (result) {
+-                      pr_err(PREFIX
+-                             "write_cmd timeout, command = %d\n", command);
+-                      goto end;
+-              }
+-              set_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
+-              acpi_ec_write_data(ec, *(wdata++));
+-      }
+-
+-      if (!rdata_len) {
+-              result = acpi_ec_wait(ec, ACPI_EC_EVENT_IBF_0, force_poll);
+-              if (result) {
+-                      pr_err(PREFIX
+-                             "finish-write timeout, command = %d\n", command);
+-                      goto end;
+-              }
+-      } else if (command == ACPI_EC_COMMAND_QUERY)
++      if (command == ACPI_EC_COMMAND_QUERY)
+               clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
+-
+-      for (; rdata_len > 0; --rdata_len) {
+-              result = acpi_ec_wait(ec, ACPI_EC_EVENT_OBF_1, force_poll);
+-              if (result) {
+-                      pr_err(PREFIX "read timeout, command = %d\n", command);
+-                      goto end;
+-              }
+-              /* Don't expect GPE after last read */
+-              if (rdata_len > 1)
+-                      set_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
+-              *(rdata++) = acpi_ec_read_data(ec);
+-      }
+-      end:
++      spin_unlock_irqrestore(&ec->t_lock, tmp);
++      /* if we selected poll mode or failed in GPE-mode do a poll loop */
++      if (force_poll ||
++          !test_bit(EC_FLAGS_GPE_MODE, &ec->flags) ||
++          acpi_ec_wait(ec))
++              ret = ec_poll(ec);
+       pr_debug(PREFIX "transaction end\n");
+-      return result;
++      spin_lock_irqsave(&ec->t_lock, tmp);
++      ec->t = NULL;
++      spin_unlock_irqrestore(&ec->t_lock, tmp);
++      if (test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) {
++              /* check if we received SCI during transaction */
++              ec_check_sci(ec, acpi_ec_read_status(ec));
++              /* it is safe to enable GPE outside of transaction */
++              acpi_enable_gpe(NULL, ec->gpe, ACPI_NOT_ISR);
++      } else if (test_bit(EC_FLAGS_GPE_MODE, &ec->flags) &&
++                 t.irq_count > ACPI_EC_STORM_THRESHOLD) {
++              pr_debug(PREFIX "GPE storm detected\n");
++              set_bit(EC_FLAGS_GPE_STORM, &ec->flags);
++      }
++      return ret;
++}
++
++static int ec_check_ibf0(struct acpi_ec *ec)
++{
++      u8 status = acpi_ec_read_status(ec);
++      return (status & ACPI_EC_FLAG_IBF) == 0;
+ }
+ static int acpi_ec_transaction(struct acpi_ec *ec, u8 command,
+@@ -283,40 +307,34 @@ static int acpi_ec_transaction(struct ac
+ {
+       int status;
+       u32 glk;
+-
+       if (!ec || (wdata_len && !wdata) || (rdata_len && !rdata))
+               return -EINVAL;
+-
+       if (rdata)
+               memset(rdata, 0, rdata_len);
+-
+       mutex_lock(&ec->lock);
+       if (ec->global_lock) {
+               status = acpi_acquire_global_lock(ACPI_EC_UDELAY_GLK, &glk);
+               if (ACPI_FAILURE(status)) {
+-                      mutex_unlock(&ec->lock);
+-                      return -ENODEV;
++                      status = -ENODEV;
++                      goto unlock;
+               }
+       }
+-
+-      status = acpi_ec_wait(ec, ACPI_EC_EVENT_IBF_0, 0);
+-      if (status) {
++      if (!wait_event_timeout(ec->wait, ec_check_ibf0(ec),
++                              msecs_to_jiffies(ACPI_EC_DELAY))) {
+               pr_err(PREFIX "input buffer is not empty, "
+                               "aborting transaction\n");
++              status = -ETIME;
+               goto end;
+       }
+-
+       status = acpi_ec_transaction_unlocked(ec, command,
+                                             wdata, wdata_len,
+                                             rdata, rdata_len,
+                                             force_poll);
+-
+-      end:
+-
++end:
+       if (ec->global_lock)
+               acpi_release_global_lock(glk);
++unlock:
+       mutex_unlock(&ec->lock);
+-
+       return status;
+ }
+@@ -332,7 +350,9 @@ int acpi_ec_burst_enable(struct acpi_ec 
+ int acpi_ec_burst_disable(struct acpi_ec *ec)
+ {
+-      return acpi_ec_transaction(ec, ACPI_EC_BURST_DISABLE, NULL, 0, NULL, 0, 0);
++      return (acpi_ec_read_status(ec) & ACPI_EC_FLAG_BURST) ?
++              acpi_ec_transaction(ec, ACPI_EC_BURST_DISABLE,
++                      NULL, 0, NULL, 0, 0) : 0;
+ }
+ static int acpi_ec_read(struct acpi_ec *ec, u8 address, u8 * data)
+@@ -513,46 +533,26 @@ static void acpi_ec_gpe_query(void *ec_c
+ static u32 acpi_ec_gpe_handler(void *data)
+ {
+-      acpi_status status = AE_OK;
+       struct acpi_ec *ec = data;
+-      u8 state = acpi_ec_read_status(ec);
++      u8 status;
+       pr_debug(PREFIX "~~~> interrupt\n");
+-      atomic_inc(&ec->irq_count);
+-      if (atomic_read(&ec->irq_count) > 5) {
+-              pr_err(PREFIX "GPE storm detected, disabling EC GPE\n");
+-              ec_switch_to_poll_mode(ec);
+-              goto end;
+-      }
+-      clear_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
+-      if (test_bit(EC_FLAGS_GPE_MODE, &ec->flags))
++      status = acpi_ec_read_status(ec);
++
++      gpe_transaction(ec, status);
++      if (ec_transaction_done(ec) && (status & ACPI_EC_FLAG_IBF) == 0)
+               wake_up(&ec->wait);
+-      if (state & ACPI_EC_FLAG_SCI) {
+-              if (!test_and_set_bit(EC_FLAGS_QUERY_PENDING, &ec->flags))
+-                      status = acpi_os_execute(OSL_EC_BURST_HANDLER,
+-                              acpi_ec_gpe_query, ec);
+-      } else if (!test_bit(EC_FLAGS_GPE_MODE, &ec->flags) &&
+-                 !test_bit(EC_FLAGS_NO_GPE, &ec->flags) &&
+-                 in_interrupt()) {
++      ec_check_sci(ec, status);
++      if (!test_bit(EC_FLAGS_GPE_MODE, &ec->flags) &&
++          !test_bit(EC_FLAGS_NO_GPE, &ec->flags)) {
+               /* this is non-query, must be confirmation */
+               if (printk_ratelimit())
+                       pr_info(PREFIX "non-query interrupt received,"
+                               " switching to interrupt mode\n");
+               set_bit(EC_FLAGS_GPE_MODE, &ec->flags);
+-              clear_bit(EC_FLAGS_RESCHEDULE_POLL, &ec->flags);
+       }
+-end:
+-      ec_schedule_ec_poll(ec);
+-      return ACPI_SUCCESS(status) ?
+-          ACPI_INTERRUPT_HANDLED : ACPI_INTERRUPT_NOT_HANDLED;
+-}
+-
+-static void do_ec_poll(struct work_struct *work)
+-{
+-      struct acpi_ec *ec = container_of(work, struct acpi_ec, work.work);
+-      atomic_set(&ec->irq_count, 0);
+-      (void)acpi_ec_gpe_handler(ec);
++      return ACPI_INTERRUPT_HANDLED;
+ }
+ /* --------------------------------------------------------------------------
+@@ -696,8 +696,7 @@ static struct acpi_ec *make_acpi_ec(void
+       mutex_init(&ec->lock);
+       init_waitqueue_head(&ec->wait);
+       INIT_LIST_HEAD(&ec->list);
+-      INIT_DELAYED_WORK_DEFERRABLE(&ec->work, do_ec_poll);
+-      atomic_set(&ec->irq_count, 0);
++      spin_lock_init(&ec->t_lock);
+       return ec;
+ }
+@@ -736,22 +735,15 @@ ec_parse_device(acpi_handle handle, u32 
+       return AE_CTRL_TERMINATE;
+ }
+-static void ec_poll_stop(struct acpi_ec *ec)
+-{
+-      clear_bit(EC_FLAGS_RESCHEDULE_POLL, &ec->flags);
+-      cancel_delayed_work(&ec->work);
+-}
+-
+ static void ec_remove_handlers(struct acpi_ec *ec)
+ {
+-      ec_poll_stop(ec);
+       if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle,
+                               ACPI_ADR_SPACE_EC, &acpi_ec_space_handler)))
+               pr_err(PREFIX "failed to remove space handler\n");
+       if (ACPI_FAILURE(acpi_remove_gpe_handler(NULL, ec->gpe,
+                               &acpi_ec_gpe_handler)))
+               pr_err(PREFIX "failed to remove gpe handler\n");
+-      ec->handlers_installed = 0;
++      clear_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags);
+ }
+ static int acpi_ec_add(struct acpi_device *device)
+@@ -846,17 +838,15 @@ ec_parse_io_ports(struct acpi_resource *
+ static int ec_install_handlers(struct acpi_ec *ec)
+ {
+       acpi_status status;
+-      if (ec->handlers_installed)
++      if (test_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags))
+               return 0;
+       status = acpi_install_gpe_handler(NULL, ec->gpe,
+-                                        ACPI_GPE_EDGE_TRIGGERED,
+-                                        &acpi_ec_gpe_handler, ec);
++                                ACPI_GPE_EDGE_TRIGGERED,
++                                &acpi_ec_gpe_handler, ec);
+       if (ACPI_FAILURE(status))
+               return -ENODEV;
+-
+       acpi_set_gpe_type(NULL, ec->gpe, ACPI_GPE_TYPE_RUNTIME);
+       acpi_enable_gpe(NULL, ec->gpe, ACPI_NOT_ISR);
+-
+       status = acpi_install_address_space_handler(ec->handle,
+                                                   ACPI_ADR_SPACE_EC,
+                                                   &acpi_ec_space_handler,
+@@ -866,7 +856,7 @@ static int ec_install_handlers(struct ac
+               return -ENODEV;
+       }
+-      ec->handlers_installed = 1;
++      set_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags);
+       return 0;
+ }
+@@ -887,7 +877,6 @@ static int acpi_ec_start(struct acpi_dev
+       /* EC is fully operational, allow queries */
+       clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
+-      ec_schedule_ec_poll(ec);
+       return ret;
+ }
+@@ -906,7 +895,7 @@ static int acpi_ec_stop(struct acpi_devi
+ int __init acpi_boot_ec_enable(void)
+ {
+-      if (!boot_ec || boot_ec->handlers_installed)
++      if (!boot_ec || test_bit(EC_FLAGS_HANDLERS_INSTALLED, &boot_ec->flags))
+               return 0;
+       if (!ec_install_handlers(boot_ec)) {
+               first_ec = boot_ec;
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:25 2008
+Message-Id: <20081104232325.708594095@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:32 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Alexey Starikovskiy <astarikovskiy@suse.de>,
+ "Rafael J. Wysocki" <rjw@suse.com>,
+ Len Brown <len.brown@intel.com>
+Subject: [patch 48/57] ACPI: EC: Rename some variables
+Content-Disposition: inline; filename=acpi-ec-rename-some-variables.patch
+Content-Length: 8692
+Lines: 286
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Alexey Starikovskiy <astarikovskiy@suse.de>
+
+commit 8463200a00fe2aea938b40173198a0983f2929ef upstream
+(needed by the next patch)
+
+No functional changes.
+
+Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
+Acked-by: Rafael J. Wysocki <rjw@suse.com>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/acpi/ec.c |  118 ++++++++++++++++++++++++++++--------------------------
+ 1 file changed, 63 insertions(+), 55 deletions(-)
+
+--- a/drivers/acpi/ec.c
++++ b/drivers/acpi/ec.c
+@@ -95,10 +95,11 @@ struct acpi_ec_query_handler {
+       u8 query_bit;
+ };
+-struct transaction_data {
++struct transaction {
+       const u8 *wdata;
+       u8 *rdata;
+       unsigned short irq_count;
++      u8 command;
+       u8 wlen;
+       u8 rlen;
+ };
+@@ -113,8 +114,8 @@ static struct acpi_ec {
+       struct mutex lock;
+       wait_queue_head_t wait;
+       struct list_head list;
+-      struct transaction_data *t;
+-      spinlock_t t_lock;
++      struct transaction *curr;
++      spinlock_t curr_lock;
+ } *boot_ec, *first_ec;
+ /* 
+@@ -176,37 +177,37 @@ static int ec_transaction_done(struct ac
+ {
+       unsigned long flags;
+       int ret = 0;
+-      spin_lock_irqsave(&ec->t_lock, flags);
+-      if (!ec->t || (!ec->t->wlen && !ec->t->rlen))
++      spin_lock_irqsave(&ec->curr_lock, flags);
++      if (!ec->curr || (!ec->curr->wlen && !ec->curr->rlen))
+               ret = 1;
+-      spin_unlock_irqrestore(&ec->t_lock, flags);
++      spin_unlock_irqrestore(&ec->curr_lock, flags);
+       return ret;
+ }
+ static void gpe_transaction(struct acpi_ec *ec, u8 status)
+ {
+       unsigned long flags;
+-      spin_lock_irqsave(&ec->t_lock, flags);
+-      if (!ec->t)
++      spin_lock_irqsave(&ec->curr_lock, flags);
++      if (!ec->curr)
+               goto unlock;
+-      if (ec->t->wlen > 0) {
++      if (ec->curr->wlen > 0) {
+               if ((status & ACPI_EC_FLAG_IBF) == 0) {
+-                      acpi_ec_write_data(ec, *(ec->t->wdata++));
+-                      --ec->t->wlen;
++                      acpi_ec_write_data(ec, *(ec->curr->wdata++));
++                      --ec->curr->wlen;
+               } else
+                       /* false interrupt, state didn't change */
+-                      ++ec->t->irq_count;
++                      ++ec->curr->irq_count;
+-      } else if (ec->t->rlen > 0) {
++      } else if (ec->curr->rlen > 0) {
+               if ((status & ACPI_EC_FLAG_OBF) == 1) {
+-                      *(ec->t->rdata++) = acpi_ec_read_data(ec);
+-                      --ec->t->rlen;
++                      *(ec->curr->rdata++) = acpi_ec_read_data(ec);
++                      --ec->curr->rlen;
+               } else
+                       /* false interrupt, state didn't change */
+-                      ++ec->t->irq_count;
++                      ++ec->curr->irq_count;
+       }
+ unlock:
+-      spin_unlock_irqrestore(&ec->t_lock, flags);
++      spin_unlock_irqrestore(&ec->curr_lock, flags);
+ }
+ static int acpi_ec_wait(struct acpi_ec *ec)
+@@ -248,15 +249,11 @@ static int ec_poll(struct acpi_ec *ec)
+       return -ETIME;
+ }
+-static int acpi_ec_transaction_unlocked(struct acpi_ec *ec, u8 command,
+-                                      const u8 * wdata, unsigned wdata_len,
+-                                      u8 * rdata, unsigned rdata_len,
++static int acpi_ec_transaction_unlocked(struct acpi_ec *ec,
++                                      struct transaction *t,
+                                       int force_poll)
+ {
+       unsigned long tmp;
+-      struct transaction_data t = {.wdata = wdata, .rdata = rdata,
+-                                   .wlen = wdata_len, .rlen = rdata_len,
+-                                   .irq_count = 0};
+       int ret = 0;
+       pr_debug(PREFIX "transaction start\n");
+       /* disable GPE during transaction if storm is detected */
+@@ -265,29 +262,30 @@ static int acpi_ec_transaction_unlocked(
+               acpi_disable_gpe(NULL, ec->gpe, ACPI_NOT_ISR);
+       }
+       /* start transaction */
+-      spin_lock_irqsave(&ec->t_lock, tmp);
++      spin_lock_irqsave(&ec->curr_lock, tmp);
+       /* following two actions should be kept atomic */
+-      ec->t = &t;
+-      acpi_ec_write_cmd(ec, command);
+-      if (command == ACPI_EC_COMMAND_QUERY)
++      t->irq_count = 0;
++      ec->curr = t;
++      acpi_ec_write_cmd(ec, ec->curr->command);
++      if (ec->curr->command == ACPI_EC_COMMAND_QUERY)
+               clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
+-      spin_unlock_irqrestore(&ec->t_lock, tmp);
++      spin_unlock_irqrestore(&ec->curr_lock, tmp);
+       /* if we selected poll mode or failed in GPE-mode do a poll loop */
+       if (force_poll ||
+           !test_bit(EC_FLAGS_GPE_MODE, &ec->flags) ||
+           acpi_ec_wait(ec))
+               ret = ec_poll(ec);
+       pr_debug(PREFIX "transaction end\n");
+-      spin_lock_irqsave(&ec->t_lock, tmp);
+-      ec->t = NULL;
+-      spin_unlock_irqrestore(&ec->t_lock, tmp);
++      spin_lock_irqsave(&ec->curr_lock, tmp);
++      ec->curr = NULL;
++      spin_unlock_irqrestore(&ec->curr_lock, tmp);
+       if (test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) {
+               /* check if we received SCI during transaction */
+               ec_check_sci(ec, acpi_ec_read_status(ec));
+               /* it is safe to enable GPE outside of transaction */
+               acpi_enable_gpe(NULL, ec->gpe, ACPI_NOT_ISR);
+       } else if (test_bit(EC_FLAGS_GPE_MODE, &ec->flags) &&
+-                 t.irq_count > ACPI_EC_STORM_THRESHOLD) {
++                 t->irq_count > ACPI_EC_STORM_THRESHOLD) {
+               pr_debug(PREFIX "GPE storm detected\n");
+               set_bit(EC_FLAGS_GPE_STORM, &ec->flags);
+       }
+@@ -300,17 +298,15 @@ static int ec_check_ibf0(struct acpi_ec 
+       return (status & ACPI_EC_FLAG_IBF) == 0;
+ }
+-static int acpi_ec_transaction(struct acpi_ec *ec, u8 command,
+-                             const u8 * wdata, unsigned wdata_len,
+-                             u8 * rdata, unsigned rdata_len,
++static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t,
+                              int force_poll)
+ {
+       int status;
+       u32 glk;
+-      if (!ec || (wdata_len && !wdata) || (rdata_len && !rdata))
++      if (!ec || (!t) || (t->wlen && !t->wdata) || (t->rlen && !t->rdata))
+               return -EINVAL;
+-      if (rdata)
+-              memset(rdata, 0, rdata_len);
++      if (t->rdata)
++              memset(t->rdata, 0, t->rlen);
+       mutex_lock(&ec->lock);
+       if (ec->global_lock) {
+               status = acpi_acquire_global_lock(ACPI_EC_UDELAY_GLK, &glk);
+@@ -326,10 +322,7 @@ static int acpi_ec_transaction(struct ac
+               status = -ETIME;
+               goto end;
+       }
+-      status = acpi_ec_transaction_unlocked(ec, command,
+-                                            wdata, wdata_len,
+-                                            rdata, rdata_len,
+-                                            force_poll);
++      status = acpi_ec_transaction_unlocked(ec, t, force_poll);
+ end:
+       if (ec->global_lock)
+               acpi_release_global_lock(glk);
+@@ -345,23 +338,32 @@ unlock:
+ int acpi_ec_burst_enable(struct acpi_ec *ec)
+ {
+       u8 d;
+-      return acpi_ec_transaction(ec, ACPI_EC_BURST_ENABLE, NULL, 0, &d, 1, 0);
++      struct transaction t = {.command = ACPI_EC_BURST_ENABLE,
++                              .wdata = NULL, .rdata = &d,
++                              .wlen = 0, .rlen = 1};
++
++      return acpi_ec_transaction(ec, &t, 0);
+ }
+ int acpi_ec_burst_disable(struct acpi_ec *ec)
+ {
++      struct transaction t = {.command = ACPI_EC_BURST_DISABLE,
++                              .wdata = NULL, .rdata = NULL,
++                              .wlen = 0, .rlen = 0};
++
+       return (acpi_ec_read_status(ec) & ACPI_EC_FLAG_BURST) ?
+-              acpi_ec_transaction(ec, ACPI_EC_BURST_DISABLE,
+-                      NULL, 0, NULL, 0, 0) : 0;
++                              acpi_ec_transaction(ec, &t, 0) : 0;
+ }
+ static int acpi_ec_read(struct acpi_ec *ec, u8 address, u8 * data)
+ {
+       int result;
+       u8 d;
++      struct transaction t = {.command = ACPI_EC_COMMAND_READ,
++                              .wdata = &address, .rdata = &d,
++                              .wlen = 1, .rlen = 1};
+-      result = acpi_ec_transaction(ec, ACPI_EC_COMMAND_READ,
+-                                   &address, 1, &d, 1, 0);
++      result = acpi_ec_transaction(ec, &t, 0);
+       *data = d;
+       return result;
+ }
+@@ -369,8 +371,11 @@ static int acpi_ec_read(struct acpi_ec *
+ static int acpi_ec_write(struct acpi_ec *ec, u8 address, u8 data)
+ {
+       u8 wdata[2] = { address, data };
+-      return acpi_ec_transaction(ec, ACPI_EC_COMMAND_WRITE,
+-                                 wdata, 2, NULL, 0, 0);
++      struct transaction t = {.command = ACPI_EC_COMMAND_WRITE,
++                              .wdata = wdata, .rdata = NULL,
++                              .wlen = 2, .rlen = 0};
++
++      return acpi_ec_transaction(ec, &t, 0);
+ }
+ /*
+@@ -432,12 +437,13 @@ int ec_transaction(u8 command,
+                  u8 * rdata, unsigned rdata_len,
+                  int force_poll)
+ {
++      struct transaction t = {.command = command,
++                              .wdata = wdata, .rdata = rdata,
++                              .wlen = wdata_len, .rlen = rdata_len};
+       if (!first_ec)
+               return -ENODEV;
+-      return acpi_ec_transaction(first_ec, command, wdata,
+-                                 wdata_len, rdata, rdata_len,
+-                                 force_poll);
++      return acpi_ec_transaction(first_ec, &t, force_poll);
+ }
+ EXPORT_SYMBOL(ec_transaction);
+@@ -446,7 +452,9 @@ static int acpi_ec_query(struct acpi_ec 
+ {
+       int result;
+       u8 d;
+-
++      struct transaction t = {.command = ACPI_EC_COMMAND_QUERY,
++                              .wdata = NULL, .rdata = &d,
++                              .wlen = 0, .rlen = 1};
+       if (!ec || !data)
+               return -EINVAL;
+@@ -456,7 +464,7 @@ static int acpi_ec_query(struct acpi_ec 
+        * bit to be cleared (and thus clearing the interrupt source).
+        */
+-      result = acpi_ec_transaction(ec, ACPI_EC_COMMAND_QUERY, NULL, 0, &d, 1, 0);
++      result = acpi_ec_transaction(ec, &t, 0);
+       if (result)
+               return result;
+@@ -696,7 +704,7 @@ static struct acpi_ec *make_acpi_ec(void
+       mutex_init(&ec->lock);
+       init_waitqueue_head(&ec->wait);
+       INIT_LIST_HEAD(&ec->list);
+-      spin_lock_init(&ec->t_lock);
++      spin_lock_init(&ec->curr_lock);
+       return ec;
+ }
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:25 2008
+Message-Id: <20081104232325.819662055@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:33 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Alexey Starikovskiy <astarikovskiy@suse.de>,
+ Len Brown <len.brown@intel.com>
+Subject: [patch 49/57] ACPI: EC: Check for IBF=0 periodically if not in GPE mode
+Content-Disposition: inline; filename=acpi-ec-check-for-ibf-0-periodically-if-not-in-gpe-mode.patch
+Content-Length: 1532
+Lines: 46
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Alexey Starikovskiy <astarikovskiy@suse.de>
+
+commit c0ff17720ec5f42205b3d2ca03a18da0a8272976 upstream.
+
+Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
+Tested-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/acpi/ec.c |   15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+--- a/drivers/acpi/ec.c
++++ b/drivers/acpi/ec.c
+@@ -298,6 +298,18 @@ static int ec_check_ibf0(struct acpi_ec 
+       return (status & ACPI_EC_FLAG_IBF) == 0;
+ }
++static int ec_wait_ibf0(struct acpi_ec *ec)
++{
++      unsigned long delay = jiffies + msecs_to_jiffies(ACPI_EC_DELAY);
++      /* interrupt wait manually if GPE mode is not active */
++      unsigned long timeout = test_bit(EC_FLAGS_GPE_MODE, &ec->flags) ?
++              msecs_to_jiffies(ACPI_EC_DELAY) : msecs_to_jiffies(1);
++      while (time_before(jiffies, delay))
++              if (wait_event_timeout(ec->wait, ec_check_ibf0(ec), timeout))
++                      return 0;
++      return -ETIME;
++}
++
+ static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t,
+                              int force_poll)
+ {
+@@ -315,8 +327,7 @@ static int acpi_ec_transaction(struct ac
+                       goto unlock;
+               }
+       }
+-      if (!wait_event_timeout(ec->wait, ec_check_ibf0(ec),
+-                              msecs_to_jiffies(ACPI_EC_DELAY))) {
++      if (ec_wait_ibf0(ec)) {
+               pr_err(PREFIX "input buffer is not empty, "
+                               "aborting transaction\n");
+               status = -ETIME;
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:26 2008
+Message-Id: <20081104232325.968509404@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:34 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Alan Cox <alan@redhat.com>,
+ Ondrej Zary <linux@rainbow-software.org>,
+ Jeff Garzik <jgarzik@redhat.com>
+Subject: [patch 50/57] libata: Fix LBA48 on pata_it821x RAID volumes.
+Content-Disposition: inline; filename=libata-fix-lba48-on-pata_it821x-raid-volumes.patch
+Content-Length: 1183
+Lines: 35
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Ondrej Zary <linux@rainbow-software.org>
+
+Subject: [patch 50/57] libata: Fix LBA48 on pata_it821x RAID volumes.
+
+commit 054e5f616b5becdc096b793407dc33fe379749ac upstream
+
+libata: Fix LBA48 on pata_it821x RAID volumes.
+
+[http://lkml.org/lkml/2008/10/18/82]
+
+Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
+Acked-by: Alan Cox <alan@redhat.com>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ata/pata_it821x.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/drivers/ata/pata_it821x.c
++++ b/drivers/ata/pata_it821x.c
+@@ -557,9 +557,8 @@ static unsigned int it821x_read_id(struc
+       if (strstr(model_num, "Integrated Technology Express")) {
+               /* Set feature bits the firmware neglects */
+               id[49] |= 0x0300;       /* LBA, DMA */
+-              id[82] |= 0x0400;       /* LBA48 */
+               id[83] &= 0x7FFF;
+-              id[83] |= 0x4000;       /* Word 83 is valid */
++              id[83] |= 0x4400;       /* Word 83 is valid and LBA48 */
+               id[86] |= 0x0400;       /* LBA48 on */
+               id[ATA_ID_MAJOR_VER] |= 0x1F;
+       }
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:26 2008
+Message-Id: <20081104232326.140638815@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:35 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Len Brown <len.brown@intel.com>,
+ Zhao Yakui <yakui.zhao@intel.com>
+Subject: [patch 51/57] ACPI: Ingore the RESET_REG_SUP bit when using ACPI reset mechanism
+Content-Disposition: inline; filename=acpi-ingore-the-reset_reg_sup-bit-when-using-acpi-reset-mechanism.patch
+Content-Length: 2707
+Lines: 75
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Zhao Yakui <yakui.zhao@intel.com>
+
+Subject: [patch 51/57] ACPI: Ingore the RESET_REG_SUP bit when using ACPI reset mechanism
+
+commit 8fd145917fb62368a9b80db59562c20576238f5a upstream
+
+ACPI: Ingore the RESET_REG_SUP bit when using ACPI reset mechanism
+
+According to ACPI 3.0, FADT.flags.RESET_REG_SUP indicates
+whether the ACPI reboot mechanism is supported.
+
+However, some boxes have this bit clear, have a valid
+ACPI_RESET_REG & RESET_VALUE, and ACPI reboot is the only
+mechanism that works for them after S3.
+
+This suggests that other operating systems may not be checking
+the RESET_REG_SUP bit, and are using other means to decide
+whether to use the ACPI reboot mechanism or not.
+
+Here we stop checking RESET_REG_SUP.
+Instead, When acpi reboot is requested,
+only the reset_register is checked. If the following
+conditions are met, it indicates that the reset register is supported.
+       a. reset_register is not zero
+       b. the access width is eight
+       c. the bit_offset is zero
+
+http://bugzilla.kernel.org/show_bug.cgi?id=7299
+http://bugzilla.kernel.org/show_bug.cgi?id=1148
+
+Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/acpi/reboot.c |   25 ++++++++++++++++++++++---
+ 1 file changed, 22 insertions(+), 3 deletions(-)
+
+--- a/drivers/acpi/reboot.c
++++ b/drivers/acpi/reboot.c
+@@ -15,9 +15,28 @@ void acpi_reboot(void)
+       rr = &acpi_gbl_FADT.reset_register;
+-      /* Is the reset register supported? */
+-      if (!(acpi_gbl_FADT.flags & ACPI_FADT_RESET_REGISTER) ||
+-          rr->bit_width != 8 || rr->bit_offset != 0)
++      /*
++       * Is the ACPI reset register supported?
++       *
++       * According to ACPI 3.0, FADT.flags.RESET_REG_SUP indicates
++       * whether the ACPI reset mechanism is supported.
++       *
++       * However, some boxes have this bit clear, yet a valid
++       * ACPI_RESET_REG & RESET_VALUE, and ACPI reboot is the only
++       * mechanism that works for them after S3.
++       *
++       * This suggests that other operating systems may not be checking
++       * the RESET_REG_SUP bit, and are using other means to decide
++       * whether to use the ACPI reboot mechanism or not.
++       *
++       * So when acpi reboot is requested,
++       * only the reset_register is checked. If the following
++       * conditions are met, it indicates that the reset register is supported.
++       *      a. reset_register is not zero
++       *      b. the access width is eight
++       *      c. the bit_offset is zero
++       */
++      if (!(rr->address) || rr->bit_width != 8 || rr->bit_offset != 0)
+               return;
+       reset_value = acpi_gbl_FADT.reset_value;
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:26 2008
+Message-Id: <20081104232326.314265769@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:36 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Len Brown <len.brown@intel.com>,
+ Matthew Garrett <mjg@redhat.com>,
+ Andi Kleen <ak@linux.intel.com>
+Subject: [patch 52/57] ACPI: Clear WAK_STS on resume
+Content-Disposition: inline; filename=acpi-clear-wak_sts-on-resume.patch
+Content-Length: 1585
+Lines: 47
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Matthew Garrett <mjg59@srcf.ucam.org>
+
+Subject: [patch 52/57] ACPI: Clear WAK_STS on resume
+
+commit a68823ee5285e65b51ceb96f8b13a5b4f99a6888 upstream.
+
+ACPI: Clear WAK_STS on resume
+
+The leading other brand OS appears to clear the WAK_STS flag on resume.
+When rebooted, certain BIOSes assume that the system is actually
+resuming if it's still set and so fail to reboot correctly. Make sure
+that it's cleared at resume time.
+
+Comment clarified as suggested by Bob Moore
+
+http://bugzilla.kernel.org/show_bug.cgi?id=11634
+
+Signed-off-by: Matthew Garrett <mjg@redhat.com>
+Signed-off-by: Andi Kleen <ak@linux.intel.com>
+Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>
+Tested-by: Romano Giannetti <romano.giannetti@gmail.com>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/acpi/hardware/hwsleep.c |    7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/acpi/hardware/hwsleep.c
++++ b/drivers/acpi/hardware/hwsleep.c
+@@ -612,6 +612,13 @@ acpi_status acpi_leave_sleep_state(u8 sl
+       }
+       /* TBD: _WAK "sometimes" returns stuff - do we want to look at it? */
++      /*
++       * Some BIOSes assume that WAK_STS will be cleared on resume and use
++       * it to determine whether the system is rebooting or resuming. Clear
++       * it for compatibility.
++       */
++      acpi_set_register(ACPI_BITREG_WAKE_STATUS, 1);
++
+       acpi_gbl_system_awake_and_running = TRUE;
+       /* Enable power button */
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:26 2008
+Message-Id: <20081104232326.481451483@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:37 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Dmitry Torokhov <dtor@mail.ru>,
+ Matthew Garrett <mjg@redhat.com>
+Subject: [patch 53/57] Input: atkbd - expand Latitudes force release quirk to other Dells
+Content-Disposition: inline; filename=input-atkbd-expand-latitude-s-force-release-quirk-to-other-dells.patch
+Content-Length: 1887
+Lines: 55
+
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Matthew Garrett <mjg59@srcf.ucam.org>
+
+commit 61579ba83934d397a4fa2bb7372de9ae112587d5 upstream.
+
+Input: atkbd - expand Latitude's force release quirk to other Dells
+
+Dell laptops fail to send key up events for several of their special
+keys. There's an existing quirk in the kernel to handle this, but it's
+limited to the Latitude range. This patch extends it to cover all
+portable Dells.
+
+Signed-off-by: Matthew Garrett <mjg@redhat.com>
+Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/input/keyboard/atkbd.c |   10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+--- a/drivers/input/keyboard/atkbd.c
++++ b/drivers/input/keyboard/atkbd.c
+@@ -834,10 +834,10 @@ static void atkbd_disconnect(struct seri
+ }
+ /*
+- * Most special keys (Fn+F?) on Dell Latitudes do not generate release
++ * Most special keys (Fn+F?) on Dell laptops do not generate release
+  * events so we have to do it ourselves.
+  */
+-static void atkbd_latitude_keymap_fixup(struct atkbd *atkbd)
++static void atkbd_dell_laptop_keymap_fixup(struct atkbd *atkbd)
+ {
+       const unsigned int forced_release_keys[] = {
+               0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8f, 0x93,
+@@ -1461,13 +1461,13 @@ static int __init atkbd_setup_fixup(cons
+ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = {
+       {
+-              .ident = "Dell Latitude series",
++              .ident = "Dell Laptop",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+-                      DMI_MATCH(DMI_PRODUCT_NAME, "Latitude"),
++                      DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */
+               },
+               .callback = atkbd_setup_fixup,
+-              .driver_data = atkbd_latitude_keymap_fixup,
++              .driver_data = atkbd_dell_laptop_keymap_fixup,
+       },
+       {
+               .ident = "HP 2133",
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:26 2008
+Message-Id: <20081104232326.652815710@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:38 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Eric Sesterhenn <snakebyte@gmx.de>,
+ Roman Zippel <zippel@linux-m68k.org>
+Subject: [patch 54/57] hfsplus: fix Buffer overflow with a corrupted image
+Content-Disposition: inline; filename=hfsplus-fix-buffer-overflow-with-a-corrupted-image.patch
+Content-Length: 6366
+Lines: 122
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Eric Sesterhenn <snakebyte@gmx.de>
+
+commit efc7ffcb4237f8cb9938909041c4ed38f6e1bf40 upstream
+
+When an hfsplus image gets corrupted it might happen that the catalog
+namelength field gets b0rked.  If we mount such an image the memcpy() in
+hfsplus_cat_build_key_uni() writes more than the 255 that fit in the name
+field.  Depending on the size of the overwritten data, we either only get
+memory corruption or also trigger an oops like this:
+
+[  221.628020] BUG: unable to handle kernel paging request at c82b0000
+[  221.629066] IP: [<c022d4b1>] hfsplus_find_cat+0x10d/0x151
+[  221.629066] *pde = 0ea29163 *pte = 082b0160
+[  221.629066] Oops: 0002 [#1] PREEMPT DEBUG_PAGEALLOC
+[  221.629066] Modules linked in:
+[  221.629066]
+[  221.629066] Pid: 4845, comm: mount Not tainted (2.6.27-rc4-00123-gd3ee1b4-dirty #28)
+[  221.629066] EIP: 0060:[<c022d4b1>] EFLAGS: 00010206 CPU: 0
+[  221.629066] EIP is at hfsplus_find_cat+0x10d/0x151
+[  221.629066] EAX: 00000029 EBX: 00016210 ECX: 000042c2 EDX: 00000002
+[  221.629066] ESI: c82d70ca EDI: c82b0000 EBP: c82d1bcc ESP: c82d199c
+[  221.629066]  DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068
+[  221.629066] Process mount (pid: 4845, ti=c82d1000 task=c8224060 task.ti=c82d1000)
+[  221.629066] Stack: c080b3c4 c82aa8f8 c82d19c2 00016210 c080b3be c82d1bd4 c82aa8f0 00000300
+[  221.629066]        01000000 750008b1 74006e00 74006900 65006c00 c82d6400 c013bd35 c8224060
+[  221.629066]        00000036 00000046 c82d19f0 00000082 c8224548 c8224060 00000036 c0d653cc
+[  221.629066] Call Trace:
+[  221.629066]  [<c013bd35>] ? trace_hardirqs_off+0xb/0xd
+[  221.629066]  [<c013bca3>] ? trace_hardirqs_off_caller+0x14/0x9b
+[  221.629066]  [<c013bd35>] ? trace_hardirqs_off+0xb/0xd
+[  221.629066]  [<c013bca3>] ? trace_hardirqs_off_caller+0x14/0x9b
+[  221.629066]  [<c013bd35>] ? trace_hardirqs_off+0xb/0xd
+[  221.629066]  [<c0107aa3>] ? native_sched_clock+0x82/0x96
+[  221.629066]  [<c01302d2>] ? __kernel_text_address+0x1b/0x27
+[  221.629066]  [<c010487a>] ? dump_trace+0xca/0xd6
+[  221.629066]  [<c0109e32>] ? save_stack_address+0x0/0x2c
+[  221.629066]  [<c0109eaf>] ? save_stack_trace+0x1c/0x3a
+[  221.629066]  [<c013b571>] ? save_trace+0x37/0x8d
+[  221.629066]  [<c013b62e>] ? add_lock_to_list+0x67/0x8d
+[  221.629066]  [<c013ea1c>] ? validate_chain+0x8a4/0x9f4
+[  221.629066]  [<c013553d>] ? down+0xc/0x2f
+[  221.629066]  [<c013f1f6>] ? __lock_acquire+0x68a/0x6e0
+[  221.629066]  [<c013bd35>] ? trace_hardirqs_off+0xb/0xd
+[  221.629066]  [<c013bca3>] ? trace_hardirqs_off_caller+0x14/0x9b
+[  221.629066]  [<c013bd35>] ? trace_hardirqs_off+0xb/0xd
+[  221.629066]  [<c0107aa3>] ? native_sched_clock+0x82/0x96
+[  221.629066]  [<c013da5d>] ? mark_held_locks+0x43/0x5a
+[  221.629066]  [<c013dc3a>] ? trace_hardirqs_on+0xb/0xd
+[  221.629066]  [<c013dbf4>] ? trace_hardirqs_on_caller+0xf4/0x12f
+[  221.629066]  [<c06abec8>] ? _spin_unlock_irqrestore+0x42/0x58
+[  221.629066]  [<c013555c>] ? down+0x2b/0x2f
+[  221.629066]  [<c022aa68>] ? hfsplus_iget+0xa0/0x154
+[  221.629066]  [<c022b0b9>] ? hfsplus_fill_super+0x280/0x447
+[  221.629066]  [<c0107aa3>] ? native_sched_clock+0x82/0x96
+[  221.629066]  [<c013bca3>] ? trace_hardirqs_off_caller+0x14/0x9b
+[  221.629066]  [<c013bca3>] ? trace_hardirqs_off_caller+0x14/0x9b
+[  221.629066]  [<c013f1f6>] ? __lock_acquire+0x68a/0x6e0
+[  221.629066]  [<c041c9e4>] ? string+0x2b/0x74
+[  221.629066]  [<c041cd16>] ? vsnprintf+0x2e9/0x512
+[  221.629066]  [<c010487a>] ? dump_trace+0xca/0xd6
+[  221.629066]  [<c0109eaf>] ? save_stack_trace+0x1c/0x3a
+[  221.629066]  [<c0109eaf>] ? save_stack_trace+0x1c/0x3a
+[  221.629066]  [<c013b571>] ? save_trace+0x37/0x8d
+[  221.629066]  [<c013b62e>] ? add_lock_to_list+0x67/0x8d
+[  221.629066]  [<c013ea1c>] ? validate_chain+0x8a4/0x9f4
+[  221.629066]  [<c01354d3>] ? up+0xc/0x2f
+[  221.629066]  [<c013f1f6>] ? __lock_acquire+0x68a/0x6e0
+[  221.629066]  [<c013bd35>] ? trace_hardirqs_off+0xb/0xd
+[  221.629066]  [<c013bca3>] ? trace_hardirqs_off_caller+0x14/0x9b
+[  221.629066]  [<c013bd35>] ? trace_hardirqs_off+0xb/0xd
+[  221.629066]  [<c0107aa3>] ? native_sched_clock+0x82/0x96
+[  221.629066]  [<c041cfb7>] ? snprintf+0x1b/0x1d
+[  221.629066]  [<c01ba466>] ? disk_name+0x25/0x67
+[  221.629066]  [<c0183960>] ? get_sb_bdev+0xcd/0x10b
+[  221.629066]  [<c016ad92>] ? kstrdup+0x2a/0x4c
+[  221.629066]  [<c022a7b3>] ? hfsplus_get_sb+0x13/0x15
+[  221.629066]  [<c022ae39>] ? hfsplus_fill_super+0x0/0x447
+[  221.629066]  [<c0183583>] ? vfs_kern_mount+0x3b/0x76
+[  221.629066]  [<c0183602>] ? do_kern_mount+0x32/0xba
+[  221.629066]  [<c01960d4>] ? do_new_mount+0x46/0x74
+[  221.629066]  [<c0196277>] ? do_mount+0x175/0x193
+[  221.629066]  [<c013dbf4>] ? trace_hardirqs_on_caller+0xf4/0x12f
+[  221.629066]  [<c01663b2>] ? __get_free_pages+0x1e/0x24
+[  221.629066]  [<c06ac07b>] ? lock_kernel+0x19/0x8c
+[  221.629066]  [<c01962e6>] ? sys_mount+0x51/0x9b
+[  221.629066]  [<c01962f9>] ? sys_mount+0x64/0x9b
+[  221.629066]  [<c01038bd>] ? sysenter_do_call+0x12/0x31
+[  221.629066]  =======================
+[  221.629066] Code: 89 c2 c1 e2 08 c1 e8 08 09 c2 8b 85 e8 fd ff ff 66 89 50 06 89 c7 53 83 c7 08 56 57 68 c4 b3 80 c0 e8 8c 5c ef ff 89 d9 c1 e9 02 <f3> a5 89 d9 83 e1 03 74 02 f3 a4 83 c3 06 8b 95 e8 fd ff ff 0f
+[  221.629066] EIP: [<c022d4b1>] hfsplus_find_cat+0x10d/0x151 SS:ESP 0068:c82d199c
+[  221.629066] ---[ end trace e417a1d67f0d0066 ]---
+
+Since hfsplus_cat_build_key_uni() returns void and only has one callsite,
+the check is performed at the callsite.
+
+Signed-off-by: Eric Sesterhenn <snakebyte@gmx.de>
+Reviewed-by: Pekka Enberg <penberg@cs.helsinki.fi>
+Cc: Roman Zippel <zippel@linux-m68k.org>
+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/hfsplus/catalog.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/fs/hfsplus/catalog.c
++++ b/fs/hfsplus/catalog.c
+@@ -168,6 +168,11 @@ int hfsplus_find_cat(struct super_block 
+               return -EIO;
+       }
++      if (be16_to_cpu(tmp.thread.nodeName.length) > 255) {
++              printk(KERN_ERR "hfs: catalog name length corrupted\n");
++              return -EIO;
++      }
++
+       hfsplus_cat_build_key_uni(fd->search_key, be32_to_cpu(tmp.thread.parentID),
+                                &tmp.thread.nodeName);
+       return hfs_brec_find(fd);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:26 2008
+Message-Id: <20081104232326.823379916@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:39 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Eric Sesterhenn <snakebyte@gmx.de>,
+ Roman Zippel <zippel@linux-m68k.org>
+Subject: [patch 55/57] hfsplus: check read_mapping_page() return value
+Content-Disposition: inline; filename=hfsplus-check-read_mapping_page-return-value.patch
+Content-Length: 4690
+Lines: 103
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Eric Sesterhenn <snakebyte@gmx.de>
+
+While testing more corrupted images with hfsplus, i came across
+one which triggered the following bug:
+
+[15840.675016] BUG: unable to handle kernel paging request at fffffffb
+[15840.675016] IP: [<c0116a4f>] kmap+0x15/0x56
+[15840.675016] *pde = 00008067 *pte = 00000000
+[15840.675016] Oops: 0000 [#1] PREEMPT DEBUG_PAGEALLOC
+[15840.675016] Modules linked in:
+[15840.675016]
+[15840.675016] Pid: 11575, comm: ln Not tainted (2.6.27-rc4-00123-gd3ee1b4-dirty #29)
+[15840.675016] EIP: 0060:[<c0116a4f>] EFLAGS: 00010202 CPU: 0
+[15840.675016] EIP is at kmap+0x15/0x56
+[15840.675016] EAX: 00000246 EBX: fffffffb ECX: 00000000 EDX: cab919c0
+[15840.675016] ESI: 000007dd EDI: cab0bcf4 EBP: cab0bc98 ESP: cab0bc94
+[15840.675016]  DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068
+[15840.675016] Process ln (pid: 11575, ti=cab0b000 task=cab919c0 task.ti=cab0b000)
+[15840.675016] Stack: 00000000 cab0bcdc c0231cfb 00000000 cab0bce0 00000800 ca9290c0 fffffffb
+[15840.675016]        cab145d0 cab919c0 cab15998 22222222 22222222 22222222 00000001 cab15960
+[15840.675016]        000007dd cab0bcf4 cab0bd04 c022cb3a cab0bcf4 cab15a6c ca9290c0 00000000
+[15840.675016] Call Trace:
+[15840.675016]  [<c0231cfb>] ? hfsplus_block_allocate+0x6f/0x2d3
+[15840.675016]  [<c022cb3a>] ? hfsplus_file_extend+0xc4/0x1db
+[15840.675016]  [<c022ce41>] ? hfsplus_get_block+0x8c/0x19d
+[15840.675016]  [<c06adde4>] ? sub_preempt_count+0x9d/0xab
+[15840.675016]  [<c019ece6>] ? __block_prepare_write+0x147/0x311
+[15840.675016]  [<c0161934>] ? __grab_cache_page+0x52/0x73
+[15840.675016]  [<c019ef4f>] ? block_write_begin+0x79/0xd5
+[15840.675016]  [<c022cdb5>] ? hfsplus_get_block+0x0/0x19d
+[15840.675016]  [<c019f22a>] ? cont_write_begin+0x27f/0x2af
+[15840.675016]  [<c022cdb5>] ? hfsplus_get_block+0x0/0x19d
+[15840.675016]  [<c0139ebe>] ? tick_program_event+0x28/0x4c
+[15840.675016]  [<c013bd35>] ? trace_hardirqs_off+0xb/0xd
+[15840.675016]  [<c022b723>] ? hfsplus_write_begin+0x2d/0x32
+[15840.675016]  [<c022cdb5>] ? hfsplus_get_block+0x0/0x19d
+[15840.675016]  [<c0161988>] ? pagecache_write_begin+0x33/0x107
+[15840.675016]  [<c01879e5>] ? __page_symlink+0x3c/0xae
+[15840.675016]  [<c019ad34>] ? __mark_inode_dirty+0x12f/0x137
+[15840.675016]  [<c0187a70>] ? page_symlink+0x19/0x1e
+[15840.675016]  [<c022e6eb>] ? hfsplus_symlink+0x41/0xa6
+[15840.675016]  [<c01886a9>] ? vfs_symlink+0x99/0x101
+[15840.675016]  [<c018a2f6>] ? sys_symlinkat+0x6b/0xad
+[15840.675016]  [<c018a348>] ? sys_symlink+0x10/0x12
+[15840.675016]  [<c01038bd>] ? sysenter_do_call+0x12/0x31
+[15840.675016]  =======================
+[15840.675016] Code: 00 00 75 10 83 3d 88 2f ec c0 02 75 07 89 d0 e8 12 56 05 00 5d c3 55 ba 06 00 00 00 89 e5 53 89 c3 b8 3d eb 7e c0 e8 16 74 00 00 <8b> 03 c1 e8 1e 69 c0 d8 02 00 00 05 b8 69 8e c0 2b 80 c4 02 00
+[15840.675016] EIP: [<c0116a4f>] kmap+0x15/0x56 SS:ESP 0068:cab0bc94
+[15840.675016] ---[ end trace 4fea40dad6b70e5f ]---
+
+This happens because the return value of read_mapping_page() is passed on
+to kmap unchecked.  The bug is triggered after the first
+read_mapping_page() in hfsplus_block_allocate(), this patch fixes all
+three usages in this functions but leaves the ones further down in the
+file unchanged.
+
+Signed-off-by: Eric Sesterhenn <snakebyte@gmx.de>
+Cc: Roman Zippel <zippel@linux-m68k.org>
+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/hfsplus/bitmap.c |   12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+--- a/fs/hfsplus/bitmap.c
++++ b/fs/hfsplus/bitmap.c
+@@ -32,6 +32,10 @@ int hfsplus_block_allocate(struct super_
+       mutex_lock(&HFSPLUS_SB(sb).alloc_file->i_mutex);
+       mapping = HFSPLUS_SB(sb).alloc_file->i_mapping;
+       page = read_mapping_page(mapping, offset / PAGE_CACHE_BITS, NULL);
++      if (IS_ERR(page)) {
++              start = size;
++              goto out;
++      }
+       pptr = kmap(page);
+       curr = pptr + (offset & (PAGE_CACHE_BITS - 1)) / 32;
+       i = offset % 32;
+@@ -73,6 +77,10 @@ int hfsplus_block_allocate(struct super_
+                       break;
+               page = read_mapping_page(mapping, offset / PAGE_CACHE_BITS,
+                                        NULL);
++              if (IS_ERR(page)) {
++                      start = size;
++                      goto out;
++              }
+               curr = pptr = kmap(page);
+               if ((size ^ offset) / PAGE_CACHE_BITS)
+                       end = pptr + PAGE_CACHE_BITS / 32;
+@@ -120,6 +128,10 @@ found:
+               offset += PAGE_CACHE_BITS;
+               page = read_mapping_page(mapping, offset / PAGE_CACHE_BITS,
+                                        NULL);
++              if (IS_ERR(page)) {
++                      start = size;
++                      goto out;
++              }
+               pptr = kmap(page);
+               curr = pptr;
+               end = pptr + PAGE_CACHE_BITS / 32;
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:27 2008
+Message-Id: <20081104232326.998473618@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:40 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Andy Gospodarek <andy@greyhouse.net>,
+ Jay Vosburgh <fubar@us.ibm.com>,
+ Jeff Garzik <jgarzik@redhat.com>
+Subject: [patch 56/57] bonding: fix panic when taking bond interface down before removing module
+Content-Disposition: inline; filename=bonding-fix-panic-when-taking-bond-interface-down-before-removing-module.patch
+Content-Length: 2575
+Lines: 69
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Andy Gospodarek <andy@greyhouse.net>
+
+commit ce39a800ea87c655de49af021c8b20ee323cb40d upstream.
+
+A panic was discovered with bonding when using mode 5 or 6 and trying to
+remove the slaves from the bond after the interface was taken down.
+When calling 'ifconfig bond0 down' the following happens:
+
+    bond_close()
+        bond_alb_deinitialize()
+            tlb_deinitialize()
+               kfree(bond_info->tx_hashtbl)
+                bond_info->tx_hashtbl = NULL
+
+Unfortunately if there are still slaves in the bond, when removing the
+module the following happens:
+
+    bonding_exit()
+        bond_free_all()
+            bond_release_all()
+                bond_alb_deinit_slave()
+                    tlb_clear_slave()
+                        tx_hash_table = BOND_ALB_INFO(bond).tx_hashtbl
+                       u32 next_index = tx_hash_table[index].next
+
+As you might guess we panic when trying to access a few entries into the
+table that no longer exists.
+
+I experimented with several options (like moving the calls to
+tlb_deinitialize somewhere else), but it really makes the most sense to
+be part of the bond_close routine.  It also didn't seem logical move
+tlb_clear_slave around too much, so the simplest option seems to add a
+check in tlb_clear_slave to make sure we haven't already wiped the
+tx_hashtbl away before searching for all the non-existent hash-table
+entries that used to point to the slave as the output interface.
+
+Signed-off-by: Andy Gospodarek <andy@greyhouse.net>
+Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/bonding/bond_alb.c |   13 ++++++++-----
+ 1 file changed, 8 insertions(+), 5 deletions(-)
+
+--- a/drivers/net/bonding/bond_alb.c
++++ b/drivers/net/bonding/bond_alb.c
+@@ -167,11 +167,14 @@ static void tlb_clear_slave(struct bondi
+       /* clear slave from tx_hashtbl */
+       tx_hash_table = BOND_ALB_INFO(bond).tx_hashtbl;
+-      index = SLAVE_TLB_INFO(slave).head;
+-      while (index != TLB_NULL_INDEX) {
+-              u32 next_index = tx_hash_table[index].next;
+-              tlb_init_table_entry(&tx_hash_table[index], save_load);
+-              index = next_index;
++      /* skip this if we've already freed the tx hash table */
++      if (tx_hash_table) {
++              index = SLAVE_TLB_INFO(slave).head;
++              while (index != TLB_NULL_INDEX) {
++                      u32 next_index = tx_hash_table[index].next;
++                      tlb_init_table_entry(&tx_hash_table[index], save_load);
++                      index = next_index;
++              }
+       }
+       tlb_init_slave(slave);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:27 2008
+Message-Id: <20081104232327.167153494@mini.kroah.org>
+References: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:22:41 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Serge Hallyn <serue@us.ibm.com>,
+ David Howells <dhowells@redhat.com>,
+ "Andrew G. Morgan" <morgan@kernel.org>
+Subject: [patch 57/57] file caps: always start with clear bprm->caps_*
+Content-Disposition: inline; filename=file-caps-always-start-with-clear-bprm-caps_.patch
+Content-Length: 1400
+Lines: 41
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Serge Hallyn <serue@us.ibm.com>
+
+commit 3318a386e4ca68c76e0294363d29bdc46fcad670 upstream
+
+While Linux doesn't honor setuid on scripts.  However, it mistakenly
+behaves differently for file capabilities.
+
+This patch fixes that behavior by making sure that get_file_caps()
+begins with empty bprm->caps_*.  That way when a script is loaded,
+its bprm->caps_* may be filled when binfmt_misc calls prepare_binprm(),
+but they will be cleared again when binfmt_elf calls prepare_binprm()
+next to read the interpreter's file capabilities.
+
+Signed-off-by: Serge Hallyn <serue@us.ibm.com>
+Acked-by: David Howells <dhowells@redhat.com>
+Acked-by: Andrew G. Morgan <morgan@kernel.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ security/commoncap.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/security/commoncap.c
++++ b/security/commoncap.c
+@@ -279,10 +279,10 @@ static int get_file_caps(struct linux_bi
+       struct vfs_cap_data vcaps;
+       struct inode *inode;
+-      if (bprm->file->f_vfsmnt->mnt_flags & MNT_NOSUID) {
+-              bprm_clear_caps(bprm);
++      bprm_clear_caps(bprm);
++
++      if (bprm->file->f_vfsmnt->mnt_flags & MNT_NOSUID)
+               return 0;
+-      }
+       dentry = dget(bprm->file->f_dentry);
+       inode = dentry->d_inode;
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov  4 15:23:17 2008
+Message-Id: <20081104232144.186593464@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 04 Nov 2008 15:21:44 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: Justin Forbes <jmforbes@linuxtx.org>,
+ Zwane Mwaikambo <zwane@arm.linux.org.uk>,
+ Theodore Ts'o <tytso@mit.edu>,
+ Randy Dunlap <rdunlap@xenotime.net>,
+ Dave Jones <davej@redhat.com>,
+ Chuck Wolber <chuckw@quantumlinux.com>,
+ Chris Wedgwood <reviews@ml.cw.f00f.org>,
+ Michael Krufky <mkrufky@linuxtv.org>,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Domenico Andreoli <cavokz@gmail.com>,
+ Willy Tarreau <w@1wt.eu>,
+ Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
+ Jake Edge <jake@lwn.net>,
+ Eugene Teo <eteo@redhat.com>,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk
+Subject: [patch 00/57] 2.6.27-stable review
+Status: RO
+Content-Length: 4250
+Lines: 81
+
+This is the start of the stable review cycle for the 2.6.27.5 release.
+There are 57 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.
+
+These patches are sent out with a number of different people on the Cc:
+line.  If you wish to be a reviewer, please email stable@kernel.org to
+add your name to the list.  If you want to be off the reviewer list,
+also email us.
+
+Responses should be made by Thursday, November 6, 23: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.27.5-rc1.gz
+and the diffstat can be found below.
+
+thanks,
+
+greg k-h
+
+-------------
+
+ Documentation/i2c/busses/i2c-sis96x              |    2 
+ MAINTAINERS                                      |   20 -
+ Makefile                                         |    2 
+ arch/powerpc/configs/linkstation_defconfig       |    7 
+ arch/powerpc/mm/hash_utils_64.c                  |    6 
+ arch/powerpc/mm/numa.c                           |  113 +++++-
+ arch/powerpc/platforms/embedded6xx/linkstation.c |   14 
+ arch/s390/kernel/smp.c                           |   24 -
+ arch/sparc64/kernel/trampoline.S                 |   18 -
+ arch/x86/kernel/process_64.c                     |    4 
+ arch/x86/kernel/rtc.c                            |   22 +
+ arch/x86/mm/pat.c                                |    4 
+ drivers/acpi/button.c                            |    3 
+ drivers/acpi/ec.c                                |  374 +++++++++++------------
+ drivers/acpi/hardware/hwsleep.c                  |    7 
+ drivers/acpi/reboot.c                            |   25 +
+ drivers/ata/libata-core.c                        |    2 
+ drivers/ata/pata_it821x.c                        |    3 
+ drivers/ata/sata_nv.c                            |   53 +--
+ drivers/ata/sata_promise.c                       |   20 +
+ drivers/base/sys.c                               |    6 
+ drivers/char/agp/intel-agp.c                     |   12 
+ drivers/char/ipmi/ipmi_devintf.c                 |    1 
+ drivers/firewire/fw-cdev.c                       |    6 
+ drivers/firewire/fw-sbp2.c                       |   38 +-
+ drivers/firewire/fw-topology.c                   |    6 
+ drivers/firewire/fw-transaction.h                |    2 
+ drivers/hid/usbhid/hid-quirks.c                  |    4 
+ drivers/i2c/busses/scx200_i2c.c                  |    1 
+ drivers/input/keyboard/atkbd.c                   |   10 
+ drivers/media/dvb/frontends/s5h1411.c            |   35 +-
+ drivers/media/video/pvrusb2/pvrusb2-encoder.c    |    4 
+ drivers/net/atlx/atl1.c                          |    7 
+ drivers/net/atlx/atl1.h                          |    2 
+ drivers/net/bonding/bond_alb.c                   |   13 
+ drivers/net/wireless/libertas/scan.c             |    4 
+ drivers/pci/probe.c                              |    2 
+ drivers/rtc/rtc-cmos.c                           |   33 +-
+ drivers/scsi/sd.c                                |   10 
+ drivers/usb/core/hcd.c                           |   35 +-
+ drivers/usb/core/hcd.h                           |    1 
+ drivers/usb/core/hub.c                           |    1 
+ drivers/usb/core/urb.c                           |   15 
+ drivers/usb/storage/unusual_devs.h               |    9 
+ fs/hfsplus/bitmap.c                              |   12 
+ fs/hfsplus/catalog.c                             |    5 
+ include/math-emu/op-common.h                     |   17 -
+ kernel/sched_clock.c                             |    6 
+ kernel/sched_features.h                          |    2 
+ net/ipv4/tcp_output.c                            |   33 +-
+ net/ipv6/tcp_ipv6.c                              |    2 
+ net/sched/sch_generic.c                          |    2 
+ scripts/package/mkspec                           |    3 
+ security/commoncap.c                             |    6 
+ sound/core/control.c                             |    4 
+ sound/pci/hda/hda_intel.c                        |   29 +
+ 56 files changed, 717 insertions(+), 384 deletions(-)
+
similarity index 100%
rename from queue-2.6.27/series
rename to review-2.6.27/series