]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
start 2.6.27.5 review cycle
authorGreg Kroah-Hartman <gregkh@suse.de>
Wed, 12 Nov 2008 00:26:05 +0000 (16:26 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 12 Nov 2008 00:26:05 +0000 (16:26 -0800)
51 files changed:
review-2.6.27/acpi-dock-avoid-check-_sta-method.patch [moved from queue-2.6.27/acpi-dock-avoid-check-_sta-method.patch with 100% similarity]
review-2.6.27/alsa-hda-make-a-stac_dell_eq-option.patch [moved from queue-2.6.27/alsa-hda-make-a-stac_dell_eq-option.patch with 100% similarity]
review-2.6.27/arm-5300-1-fixup-spitz-reset-during-boot.patch [moved from queue-2.6.27/arm-5300-1-fixup-spitz-reset-during-boot.patch with 100% similarity]
review-2.6.27/arm-xsc3-fix-xsc3_l2_inv_range.patch [moved from queue-2.6.27/arm-xsc3-fix-xsc3_l2_inv_range.patch with 97% similarity]
review-2.6.27/cciss-fix-regression-firmware-not-displayed-in-procfs.patch [moved from queue-2.6.27/cciss-fix-regression-firmware-not-displayed-in-procfs.patch with 100% similarity]
review-2.6.27/cciss-fix-sysfs-broken-symlink-regression.patch [moved from queue-2.6.27/cciss-fix-sysfs-broken-symlink-regression.patch with 100% similarity]
review-2.6.27/cciss-new-hardware-support.patch [moved from queue-2.6.27/cciss-new-hardware-support.patch with 100% similarity]
review-2.6.27/cgroups-fix-invalid-cgrp-dentry-before-cgroup-has-been-completely-removed.patch [moved from queue-2.6.27/cgroups-fix-invalid-cgrp-dentry-before-cgroup-has-been-completely-removed.patch with 100% similarity]
review-2.6.27/cpqarry-fix-return-value-of-cpqarray_init.patch [moved from queue-2.6.27/cpqarry-fix-return-value-of-cpqarray_init.patch with 100% similarity]
review-2.6.27/dca-fixup-initialization-dependency.patch [moved from queue-2.6.27/dca-fixup-initialization-dependency.patch with 100% similarity]
review-2.6.27/ext3-wait-on-all-pending-commits-in-ext3_sync_fs.patch [moved from queue-2.6.27/ext3-wait-on-all-pending-commits-in-ext3_sync_fs.patch with 100% similarity]
review-2.6.27/fix-__pfn_to_page-for-config_discontigmem-y.patch [moved from queue-2.6.27/fix-__pfn_to_page-for-config_discontigmem-y.patch with 100% similarity]
review-2.6.27/hfs-fix-namelength-memory-corruption.patch [moved from queue-2.6.27/hfs-fix-namelength-memory-corruption.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/hid-fix-incorrent-length-condition-in-hidraw_write.patch [moved from queue-2.6.27/hid-fix-incorrent-length-condition-in-hidraw_write.patch with 100% similarity]
review-2.6.27/hugetlb-pull-gigantic-page-initialisation-out-of-the-default-path.patch [moved from queue-2.6.27/hugetlb-pull-gigantic-page-initialisation-out-of-the-default-path.patch with 100% similarity]
review-2.6.27/hugetlbfs-handle-pages-higher-order-than-max_order.patch [moved from queue-2.6.27/hugetlbfs-handle-pages-higher-order-than-max_order.patch with 98% similarity]
review-2.6.27/i-oat-fix-async_tx.callback-checking.patch [moved from queue-2.6.27/i-oat-fix-async_tx.callback-checking.patch with 100% similarity]
review-2.6.27/i-oat-fix-channel-resources-free-for-not-allocated-channels.patch [moved from queue-2.6.27/i-oat-fix-channel-resources-free-for-not-allocated-channels.patch with 100% similarity]
review-2.6.27/i-oat-fix-dma_pin_iovec_pages-error-handling.patch [moved from queue-2.6.27/i-oat-fix-dma_pin_iovec_pages-error-handling.patch with 100% similarity]
review-2.6.27/iwl3945-do-not-send-scan-command-if-channel-count-zero.patch [moved from queue-2.6.27/iwl3945-do-not-send-scan-command-if-channel-count-zero.patch with 100% similarity]
review-2.6.27/iwl3945-fix-deadlock-on-suspend.patch [moved from queue-2.6.27/iwl3945-fix-deadlock-on-suspend.patch with 100% similarity]
review-2.6.27/iwlwifi-allow-association-on-radar-channel-in-power-save.patch [moved from queue-2.6.27/iwlwifi-allow-association-on-radar-channel-in-power-save.patch with 100% similarity]
review-2.6.27/iwlwifi-allow-consecutive-scans-in-unassociated-state.patch [moved from queue-2.6.27/iwlwifi-allow-consecutive-scans-in-unassociated-state.patch with 100% similarity]
review-2.6.27/iwlwifi-don-t-fail-if-scan-is-issued-too-early.patch [moved from queue-2.6.27/iwlwifi-don-t-fail-if-scan-is-issued-too-early.patch with 100% similarity]
review-2.6.27/iwlwifi-fix-suspend-to-ram-in-iwlwifi.patch [moved from queue-2.6.27/iwlwifi-fix-suspend-to-ram-in-iwlwifi.patch with 100% similarity]
review-2.6.27/iwlwifi-generic-init-calibrations-framework.patch [moved from queue-2.6.27/iwlwifi-generic-init-calibrations-framework.patch with 100% similarity]
review-2.6.27/iwlwifi-remove-ht-flags-from-rxon-when-not-in-ht-anymore.patch [moved from queue-2.6.27/iwlwifi-remove-ht-flags-from-rxon-when-not-in-ht-anymore.patch with 100% similarity]
review-2.6.27/iwlwifi-use-correct-dma_mask.patch [moved from queue-2.6.27/iwlwifi-use-correct-dma_mask.patch with 100% similarity]
review-2.6.27/jffs2-fix-lack-of-locking-in-thread_should_wake.patch [moved from queue-2.6.27/jffs2-fix-lack-of-locking-in-thread_should_wake.patch with 100% similarity]
review-2.6.27/jffs2-fix-race-condition-in-jffs2_lzo_compress.patch [moved from queue-2.6.27/jffs2-fix-race-condition-in-jffs2_lzo_compress.patch with 100% similarity]
review-2.6.27/keys-make-request-key-instantiate-the-per-user-keyrings.patch [moved from queue-2.6.27/keys-make-request-key-instantiate-the-per-user-keyrings.patch with 100% similarity]
review-2.6.27/libata-fix-last_reset-timestamp-handling.patch [moved from queue-2.6.27/libata-fix-last_reset-timestamp-handling.patch with 100% similarity]
review-2.6.27/mbox [new file with mode: 0644]
review-2.6.27/md-fix-bug-in-raid10-recovery.patch [moved from queue-2.6.27/md-fix-bug-in-raid10-recovery.patch with 100% similarity]
review-2.6.27/md-linear-fix-a-division-by-zero-bug-for-very-small-arrays.patch [moved from queue-2.6.27/md-linear-fix-a-division-by-zero-bug-for-very-small-arrays.patch with 100% similarity]
review-2.6.27/mmc-increase-sd-write-timeout-for-crappy-cards.patch [moved from queue-2.6.27/mmc-increase-sd-write-timeout-for-crappy-cards.patch with 100% similarity]
review-2.6.27/mtd-fix-cfi_send_gen_cmd-handling-of-x16-devices-in-x8-mode.patch [moved from queue-2.6.27/mtd-fix-cfi_send_gen_cmd-handling-of-x16-devices-in-x8-mode.patch with 100% similarity]
review-2.6.27/net-unix-fix-inflight-counting-bug-in-garbage-collector.patch [moved from queue-2.6.27/net-unix-fix-inflight-counting-bug-in-garbage-collector.patch with 100% similarity]
review-2.6.27/r8169-fix-rxmissed-register-access.patch [moved from queue-2.6.27/r8169-fix-rxmissed-register-access.patch with 100% similarity]
review-2.6.27/r8169-get-ethtool-settings-through-the-generic-mii-helper.patch [moved from queue-2.6.27/r8169-get-ethtool-settings-through-the-generic-mii-helper.patch with 100% similarity]
review-2.6.27/r8169-wake-up-the-phy-of-the-8168.patch [moved from queue-2.6.27/r8169-wake-up-the-phy-of-the-8168.patch with 100% similarity]
review-2.6.27/series [moved from queue-2.6.27/series with 100% similarity]
review-2.6.27/x86-add-dmi-quirk-for-ami-bios-which-corrupts-address-0xc000-during-resume.patch [moved from queue-2.6.27/x86-add-dmi-quirk-for-ami-bios-which-corrupts-address-0xc000-during-resume.patch with 100% similarity]
review-2.6.27/x86-add-x86_reserve_low_64k.patch [moved from queue-2.6.27/x86-add-x86_reserve_low_64k.patch with 100% similarity]
review-2.6.27/x86-don-t-use-tsc_khz-to-calculate-lpj-if-notsc-is-passed.patch [moved from queue-2.6.27/x86-don-t-use-tsc_khz-to-calculate-lpj-if-notsc-is-passed.patch with 100% similarity]
review-2.6.27/x86-fix-config_x86_reserve_low_64k-y.patch [moved from queue-2.6.27/x86-fix-config_x86_reserve_low_64k-y.patch with 100% similarity]
review-2.6.27/x86-fix-macro-with-bad_bios_dmi_table.patch [moved from queue-2.6.27/x86-fix-macro-with-bad_bios_dmi_table.patch with 100% similarity]
review-2.6.27/x86-reserve-low-64k-on-ami-and-phoenix-bios-boxen.patch [moved from queue-2.6.27/x86-reserve-low-64k-on-ami-and-phoenix-bios-boxen.patch with 100% similarity]
review-2.6.27/zd1211rw-add-2-device-ids.patch [moved from queue-2.6.27/zd1211rw-add-2-device-ids.patch with 100% similarity]

similarity index 97%
rename from queue-2.6.27/arm-xsc3-fix-xsc3_l2_inv_range.patch
rename to review-2.6.27/arm-xsc3-fix-xsc3_l2_inv_range.patch
index ea3982f42f1c25571a70b0a00ddf76d65d551be0..121b611c1f44e924128f792d89a3f8ca8c01463e 100644 (file)
@@ -21,7 +21,7 @@ This issue was caught by drivers/dma/dmatest.
 
 Cc: <stable@kernel.org>
 Cc: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
-Cc: Lothar WaÃ<9f>mann <LW@KARO-electronics.de>
+Cc: Lothar Wafmann <LW@KARO-electronics.de>
 Cc: Lennert Buytenhek <buytenh@marvell.com>
 Cc: Eric Miao <eric.miao@marvell.com>
 Signed-off-by: Dan Williams <dan.j.williams@intel.com>
similarity index 98%
rename from queue-2.6.27/hugetlbfs-handle-pages-higher-order-than-max_order.patch
rename to review-2.6.27/hugetlbfs-handle-pages-higher-order-than-max_order.patch
index d1d40b62b00e50996edbe13213496a59dfb9c949..65725203df302a7a11a8f540a79c8bef894bfa9f 100644 (file)
@@ -1,7 +1,7 @@
 From jejb@kernel.org  Mon Nov 10 15:16:22 2008
 From: Andy Whitcroft <apw@shadowen.org>
 Date: Fri, 7 Nov 2008 00:06:24 GMT
-Subject:hugetlbfs: handle pages higher order than MAX_ORDER
+Subject: hugetlbfs: handle pages higher order than MAX_ORDER
 To: stable@kernel.org
 Message-ID: <200811070006.mA706OTv004171@hera.kernel.org>
 
diff --git a/review-2.6.27/mbox b/review-2.6.27/mbox
new file mode 100644 (file)
index 0000000..2b63bca
--- /dev/null
@@ -0,0 +1,5617 @@
+From gregkh@mini.kroah.org Tue Nov 11 16:15:50 2008
+Message-Id: <20081112001550.504007585@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Arthur Jones <ajones@riverbed.com>,
+ Eric Sandeen <sandeen@redhat.com>,
+  <linux-ext4@vger.kernel.org>
+Subject: [patch 01/49] ext3: wait on all pending commits in ext3_sync_fs
+Content-Disposition: inline; filename=ext3-wait-on-all-pending-commits-in-ext3_sync_fs.patch
+Content-Length: 2255
+Lines: 73
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Arthur Jones <ajones@riverbed.com>
+
+commit c87591b719737b4e91eb1a9fa8fd55a4ff1886d6 upstream
+
+In ext3_sync_fs, we only wait for a commit to finish if we started it, but
+there may be one already in progress which will not be synced.
+
+In the case of a data=ordered umount with pending long symlinks which are
+delayed due to a long list of other I/O on the backing block device, this
+causes the buffer associated with the long symlinks to not be moved to the
+inode dirty list in the second phase of fsync_super.  Then, before they
+can be dirtied again, kjournald exits, seeing the UMOUNT flag and the
+dirty pages are never written to the backing block device, causing long
+symlink corruption and exposing new or previously freed block data to
+userspace.
+
+This can be reproduced with a script created
+by Eric Sandeen <sandeen@redhat.com>:
+
+       #!/bin/bash
+
+       umount /mnt/test2
+       mount /dev/sdb4 /mnt/test2
+       rm -f /mnt/test2/*
+       dd if=/dev/zero of=/mnt/test2/bigfile bs=1M count=512
+       touch
+       /mnt/test2/thisisveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryverylongfilename
+       ln -s
+       /mnt/test2/thisisveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryverylongfilename
+       /mnt/test2/link
+       umount /mnt/test2
+       mount /dev/sdb4 /mnt/test2
+       ls /mnt/test2/
+       umount /mnt/test2
+
+To ensure all commits are synced, we flush all journal commits now when
+sync_fs'ing ext3.
+
+Signed-off-by: Arthur Jones <ajones@riverbed.com>
+Cc: Eric Sandeen <sandeen@redhat.com>
+Cc: Theodore Ts'o <tytso@mit.edu>
+Cc: <linux-ext4@vger.kernel.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/ext3/super.c |   11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+--- a/fs/ext3/super.c
++++ b/fs/ext3/super.c
+@@ -2365,13 +2365,12 @@ static void ext3_write_super (struct sup
+ static int ext3_sync_fs(struct super_block *sb, int wait)
+ {
+-      tid_t target;
+-
+       sb->s_dirt = 0;
+-      if (journal_start_commit(EXT3_SB(sb)->s_journal, &target)) {
+-              if (wait)
+-                      log_wait_commit(EXT3_SB(sb)->s_journal, target);
+-      }
++      if (wait)
++              ext3_force_commit(sb);
++      else
++              journal_start_commit(EXT3_SB(sb)->s_journal, NULL);
++
+       return 0;
+ }
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:50 2008
+Message-Id: <20081112001550.708816855@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 02/49] x86: add DMI quirk for AMI BIOS which corrupts address 0xc000 during resume
+Content-Disposition: inline; filename=x86-add-dmi-quirk-for-ami-bios-which-corrupts-address-0xc000-during-resume.patch
+Content-Length: 2373
+Lines: 81
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Ingo Molnar <mingo@elte.hu>
+
+commit 5649b7c30316a51792808422ac03ee825d26aa5e upstream
+
+Alan Jenkins and Andy Wettstein reported a suspend/resume memory
+corruption bug and extensively documented it here:
+
+   http://bugzilla.kernel.org/show_bug.cgi?id=11237
+
+The bug is that the BIOS overwrites 1K of memory at 0xc000 physical,
+without registering it in e820 as reserved or giving the kernel any
+idea about this.
+
+Detect AMI BIOSen and reserve that 1K.
+
+We paint this bug around with a very broad brush (reserving that 1K on all
+AMI BIOS systems), as the bug was extremely hard to find and needed several
+weeks and lots of debugging and patching.
+
+The bug was found via the CONFIG_X86_CHECK_BIOS_CORRUPTION=y debug feature,
+if similar bugs are suspected then this feature can be enabled on other
+systems as well to scan low memory for corrupted memory.
+
+Reported-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
+Reported-by: Andy Wettstein <ajw1980@gmail.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/setup.c |   27 +++++++++++++++++++++++++++
+ 1 file changed, 27 insertions(+)
+
+--- a/arch/x86/kernel/setup.c
++++ b/arch/x86/kernel/setup.c
+@@ -578,6 +578,29 @@ static struct x86_quirks default_x86_qui
+ struct x86_quirks *x86_quirks __initdata = &default_x86_quirks;
++static int __init dmi_low_memory_corruption(const struct dmi_system_id *d)
++{
++      printk(KERN_NOTICE
++              "%s detected: BIOS corrupts 0xc000, working it around.\n",
++              d->ident);
++
++      reserve_early(0xc000, 0xc400, "BIOS quirk");
++
++      return 0;
++}
++
++/* List of systems that have known low memory corruption BIOS problems */
++static struct dmi_system_id __initdata bad_bios_dmi_table[] = {
++      {
++              .callback = dmi_low_memory_corruption,
++              .ident = "AMI BIOS",
++              .matches = {
++                      DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."),
++              },
++      },
++      {}
++};
++
+ /*
+  * Determine if we were loaded by an EFI loader.  If so, then we have also been
+  * passed the efi memmap, systab, etc., so we should use these data structures
+@@ -601,6 +624,8 @@ void __init setup_arch(char **cmdline_p)
+       printk(KERN_INFO "Command line: %s\n", boot_command_line);
+ #endif
++      dmi_check_system(bad_bios_dmi_table);
++
+       early_cpu_init();
+       early_ioremap_init();
+@@ -885,3 +910,5 @@ void __init setup_arch(char **cmdline_p)
+ #endif
+ #endif
+ }
++
++
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:51 2008
+Message-Id: <20081112001550.943343100@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 03/49] x86: reserve low 64K on AMI and Phoenix BIOS boxen
+Content-Disposition: inline; filename=x86-reserve-low-64k-on-ami-and-phoenix-bios-boxen.patch
+Content-Length: 1598
+Lines: 59
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Ingo Molnar <mingo@elte.hu>
+
+commit 1e22436eba84edfec9c25e5a25d09062c4f91ca9 upstream
+
+there's multiple reports about suspend/resume related low memory
+corruption in this bugzilla:
+
+  http://bugzilla.kernel.org/show_bug.cgi?id=11237
+
+the common pattern is that the corruption is caused by the BIOS,
+and that it affects some portion of the first 64K of physical RAM.
+
+So add a DMI quirk
+
+This will waste 64K RAM on 'good' systems too, but without knowing
+the exact nature of this BIOS memory corruption this is the safest
+approach.
+
+This might as well solve a wide range of suspend/resume breakages
+under Linux.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/setup.c |   11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+--- a/arch/x86/kernel/setup.c
++++ b/arch/x86/kernel/setup.c
+@@ -581,10 +581,10 @@ struct x86_quirks *x86_quirks __initdata
+ static int __init dmi_low_memory_corruption(const struct dmi_system_id *d)
+ {
+       printk(KERN_NOTICE
+-              "%s detected: BIOS corrupts 0xc000, working it around.\n",
++              "%s detected: BIOS may corrupt low RAM, working it around.\n",
+               d->ident);
+-      reserve_early(0xc000, 0xc400, "BIOS quirk");
++      reserve_early(0x0, 0x10000, "BIOS quirk");
+       return 0;
+ }
+@@ -598,6 +598,13 @@ static struct dmi_system_id __initdata b
+                       DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."),
+               },
+       },
++      {
++              .callback = dmi_low_memory_corruption,
++              .ident = "Phoenix BIOS",
++              .matches = {
++                      DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies, LTD"),
++              },
++      },
+       {}
+ };
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:51 2008
+Message-Id: <20081112001551.124215739@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 04/49] x86: add X86_RESERVE_LOW_64K
+Content-Disposition: inline; filename=x86-add-x86_reserve_low_64k.patch
+Content-Length: 2663
+Lines: 87
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Ingo Molnar <mingo@elte.hu>
+
+commit fc38151947477596aa27df6c4306ad6008dc6711 upstream.
+
+This bugzilla:
+
+  http://bugzilla.kernel.org/show_bug.cgi?id=11237
+
+Documents a wide range of systems where the BIOS utilizes the first
+64K of physical memory during suspend/resume and other hardware events.
+
+Currently we reserve this memory on all AMI and Phoenix BIOS systems.
+Life is too short to hunt subtle memory corruption problems like this,
+so we try to be robust by default.
+
+Still, allow this to be overriden: allow users who want that first 64K
+of memory to be available to the kernel disable the quirk, via
+CONFIG_X86_RESERVE_LOW_64K=n.
+
+Also, allow the early reservation to overlap with other
+early reservations.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/Kconfig        |   20 ++++++++++++++++++++
+ arch/x86/kernel/setup.c |    4 +++-
+ 2 files changed, 23 insertions(+), 1 deletion(-)
+
+--- a/arch/x86/Kconfig
++++ b/arch/x86/Kconfig
+@@ -1059,6 +1059,26 @@ config HIGHPTE
+         low memory.  Setting this option will put user-space page table
+         entries in high memory.
++config X86_RESERVE_LOW_64K
++        bool "Reserve low 64K of RAM on AMI/Phoenix BIOSen"
++      default y
++      help
++       Reserve the first 64K of physical RAM on BIOSes that are known
++       to potentially corrupt that memory range. A numbers of BIOSes are
++       known to utilize this area during suspend/resume, so it must not
++       be used by the kernel.
++
++       Set this to N if you are absolutely sure that you trust the BIOS
++       to get all its memory reservations and usages right.
++
++       If you have doubts about the BIOS (e.g. suspend/resume does not
++       work or there's kernel crashes after certain hardware hotplug
++       events) and it's not AMI or Phoenix, then you might want to enable
++       X86_CHECK_BIOS_CORRUPTION=y to allow the kernel to check typical
++       corruption patterns.
++
++       Say Y if unsure.
++
+ config MATH_EMULATION
+       bool
+       prompt "Math emulation" if X86_32
+--- a/arch/x86/kernel/setup.c
++++ b/arch/x86/kernel/setup.c
+@@ -584,13 +584,14 @@ static int __init dmi_low_memory_corrupt
+               "%s detected: BIOS may corrupt low RAM, working it around.\n",
+               d->ident);
+-      reserve_early(0x0, 0x10000, "BIOS quirk");
++      reserve_early_overlap_ok(0x0, 0x10000, "BIOS quirk");
+       return 0;
+ }
+ /* List of systems that have known low memory corruption BIOS problems */
+ static struct dmi_system_id __initdata bad_bios_dmi_table[] = {
++#ifdef CONFIG_X86_RESERVE_LOW_64K
+       {
+               .callback = dmi_low_memory_corruption,
+               .ident = "AMI BIOS",
+@@ -606,6 +607,7 @@ static struct dmi_system_id __initdata b
+               },
+       },
+       {}
++#endif
+ };
+ /*
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:51 2008
+Message-Id: <20081112001551.291748415@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 05/49] x86: fix CONFIG_X86_RESERVE_LOW_64K=y
+Content-Disposition: inline; filename=x86-fix-config_x86_reserve_low_64k-y.patch
+Content-Length: 1577
+Lines: 61
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Yinghai Lu <yhlu.kernel@gmail.com>
+
+commit 2216d199b1430d1c0affb1498a9ebdbd9c0de439 upstream
+
+The bad_bios_dmi_table() quirk never triggered because we do DMI setup
+too late. Move it a bit earlier.
+
+Also change the CONFIG_X86_RESERVE_LOW_64K quirk to operate on the e820
+table directly instead of messing with early reservations - this handles
+overlaps (which do occur in this low range of RAM) more gracefully.
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/setup.c |   11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+--- a/arch/x86/kernel/setup.c
++++ b/arch/x86/kernel/setup.c
+@@ -584,7 +584,8 @@ static int __init dmi_low_memory_corrupt
+               "%s detected: BIOS may corrupt low RAM, working it around.\n",
+               d->ident);
+-      reserve_early_overlap_ok(0x0, 0x10000, "BIOS quirk");
++      e820_update_range(0, 0x10000, E820_RAM, E820_RESERVED);
++      sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map);
+       return 0;
+ }
+@@ -633,8 +634,6 @@ void __init setup_arch(char **cmdline_p)
+       printk(KERN_INFO "Command line: %s\n", boot_command_line);
+ #endif
+-      dmi_check_system(bad_bios_dmi_table);
+-
+       early_cpu_init();
+       early_ioremap_init();
+@@ -733,6 +732,10 @@ void __init setup_arch(char **cmdline_p)
+       finish_e820_parsing();
++      dmi_scan_machine();
++
++      dmi_check_system(bad_bios_dmi_table);
++
+ #ifdef CONFIG_X86_32
+       probe_roms();
+ #endif
+@@ -815,8 +818,6 @@ void __init setup_arch(char **cmdline_p)
+       vsmp_init();
+ #endif
+-      dmi_scan_machine();
+-
+       io_delay_init();
+       /*
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:51 2008
+Message-Id: <20081112001551.483805856@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Yinghai Lu <yhlu.kernel@gmail.com>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 06/49] x86: fix macro with bad_bios_dmi_table
+Content-Disposition: inline; filename=x86-fix-macro-with-bad_bios_dmi_table.patch
+Content-Length: 632
+Lines: 30
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Yinghai Lu <yhlu.kernel@gmail.com>
+
+commit a8b71a2810386a5ac8f43d2095fe3355f0d8db37 upstream.
+
+DMI tables need a blank NULL tail.
+
+fixes the crash on Ingo's test box.
+
+Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/setup.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/x86/kernel/setup.c
++++ b/arch/x86/kernel/setup.c
+@@ -607,8 +607,8 @@ static struct dmi_system_id __initdata b
+                       DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies, LTD"),
+               },
+       },
+-      {}
+ #endif
++      {}
+ };
+ /*
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:51 2008
+Message-Id: <20081112001551.659780316@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Li Zefan <lizf@cn.fujitsu.com>,
+ Paul Menage <menage@google.com>,
+ Peter Zijlstra <a.p.zijlstra@chello.nl>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 07/49] cgroups: fix invalid cgrp->dentry before cgroup has been completely removed
+Content-Disposition: inline; filename=cgroups-fix-invalid-cgrp-dentry-before-cgroup-has-been-completely-removed.patch
+Content-Length: 1456
+Lines: 56
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Li Zefan <lizf@cn.fujitsu.com>
+
+commit 24eb089950ce44603b30a3145a2c8520e2b55bb1 upstream
+
+This fixes an oops when reading /proc/sched_debug.
+
+A cgroup won't be removed completely until finishing cgroup_diput(), so we
+shouldn't invalidate cgrp->dentry in cgroup_rmdir().  Otherwise, when a
+group is being removed while cgroup_path() gets called, we may trigger
+NULL dereference BUG.
+
+The bug can be reproduced:
+
+ # cat test.sh
+ #!/bin/sh
+ mount -t cgroup -o cpu xxx /mnt
+ for (( ; ; ))
+ {
+       mkdir /mnt/sub
+       rmdir /mnt/sub
+ }
+ # ./test.sh &
+ # cat /proc/sched_debug
+
+BUG: unable to handle kernel NULL pointer dereference at 00000038
+IP: [<c045a47f>] cgroup_path+0x39/0x90
+..
+Call Trace:
+ [<c0420344>] ? print_cfs_rq+0x6e/0x75d
+ [<c0421160>] ? sched_debug_show+0x72d/0xc1e
+..
+
+Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
+Acked-by: Paul Menage <menage@google.com>
+Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Cc: Ingo Molnar <mingo@elte.hu>
+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>
+
+---
+ kernel/cgroup.c |    1 -
+ 1 file changed, 1 deletion(-)
+
+--- a/kernel/cgroup.c
++++ b/kernel/cgroup.c
+@@ -2443,7 +2443,6 @@ static int cgroup_rmdir(struct inode *un
+       list_del(&cgrp->sibling);
+       spin_lock(&cgrp->dentry->d_lock);
+       d = dget(cgrp->dentry);
+-      cgrp->dentry = NULL;
+       spin_unlock(&d->d_lock);
+       cgroup_d_remove_dir(d);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:52 2008
+Message-Id: <20081112001551.856749205@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Andy Whitcroft <apw@shadowen.org>,
+ Jon Tollefson <kniht@linux.vnet.ibm.com>,
+ Mel Gorman <mel@csn.ul.ie>,
+ Nick Piggin <nickpiggin@yahoo.com.au>,
+ Christoph Lameter <cl@linux-foundation.org>
+Subject: [patch 08/49] hugetlb: pull gigantic page initialisation out of the default path
+Content-Disposition: inline; filename=hugetlb-pull-gigantic-page-initialisation-out-of-the-default-path.patch
+Content-Length: 3954
+Lines: 131
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Andy Whitcroft <apw@shadowen.org>
+
+commit 18229df5b613ed0732a766fc37850de2e7988e43 upstream
+
+As we can determine exactly when a gigantic page is in use we can optimise
+the common regular page cases by pulling out gigantic page initialisation
+into its own function.  As gigantic pages are never released to buddy we
+do not need a destructor.  This effectivly reverts the previous change to
+the main buddy allocator.  It also adds a paranoid check to ensure we
+never release gigantic pages from hugetlbfs to the main buddy.
+
+Signed-off-by: Andy Whitcroft <apw@shadowen.org>
+Cc: Jon Tollefson <kniht@linux.vnet.ibm.com>
+Cc: Mel Gorman <mel@csn.ul.ie>
+Cc: Nick Piggin <nickpiggin@yahoo.com.au>
+Cc: Christoph Lameter <cl@linux-foundation.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>
+
+---
+ mm/hugetlb.c    |   12 +++++++++++-
+ mm/internal.h   |    1 +
+ mm/page_alloc.c |   28 +++++++++++++++++++++-------
+ 3 files changed, 33 insertions(+), 8 deletions(-)
+
+--- a/mm/hugetlb.c
++++ b/mm/hugetlb.c
+@@ -455,6 +455,8 @@ static void update_and_free_page(struct 
+ {
+       int i;
++      VM_BUG_ON(h->order >= MAX_ORDER);
++
+       h->nr_huge_pages--;
+       h->nr_huge_pages_node[page_to_nid(page)]--;
+       for (i = 0; i < pages_per_huge_page(h); i++) {
+@@ -969,6 +971,14 @@ found:
+       return 1;
+ }
++static void prep_compound_huge_page(struct page *page, int order)
++{
++      if (unlikely(order > (MAX_ORDER - 1)))
++              prep_compound_gigantic_page(page, order);
++      else
++              prep_compound_page(page, order);
++}
++
+ /* Put bootmem huge pages into the standard lists after mem_map is up */
+ static void __init gather_bootmem_prealloc(void)
+ {
+@@ -979,7 +989,7 @@ static void __init gather_bootmem_preall
+               struct hstate *h = m->hstate;
+               __ClearPageReserved(page);
+               WARN_ON(page_count(page) != 1);
+-              prep_compound_page(page, h->order);
++              prep_compound_huge_page(page, h->order);
+               prep_new_huge_page(h, page, page_to_nid(page));
+       }
+ }
+--- a/mm/internal.h
++++ b/mm/internal.h
+@@ -17,6 +17,7 @@ void free_pgtables(struct mmu_gather *tl
+               unsigned long floor, unsigned long ceiling);
+ extern void prep_compound_page(struct page *page, unsigned long order);
++extern void prep_compound_gigantic_page(struct page *page, unsigned long order);
+ static inline void set_page_count(struct page *page, int v)
+ {
+--- a/mm/page_alloc.c
++++ b/mm/page_alloc.c
+@@ -268,24 +268,39 @@ void prep_compound_page(struct page *pag
+ {
+       int i;
+       int nr_pages = 1 << order;
++
++      set_compound_page_dtor(page, free_compound_page);
++      set_compound_order(page, order);
++      __SetPageHead(page);
++      for (i = 1; i < nr_pages; i++) {
++              struct page *p = page + i;
++
++              __SetPageTail(p);
++              p->first_page = page;
++      }
++}
++
++#ifdef CONFIG_HUGETLBFS
++void prep_compound_gigantic_page(struct page *page, unsigned long order)
++{
++      int i;
++      int nr_pages = 1 << order;
+       struct page *p = page + 1;
+       set_compound_page_dtor(page, free_compound_page);
+       set_compound_order(page, order);
+       __SetPageHead(page);
+-      for (i = 1; i < nr_pages; i++, p++) {
+-              if (unlikely((i & (MAX_ORDER_NR_PAGES - 1)) == 0))
+-                      p = pfn_to_page(page_to_pfn(page) + i);
++      for (i = 1; i < nr_pages; i++, p = mem_map_next(p, page, i)) {
+               __SetPageTail(p);
+               p->first_page = page;
+       }
+ }
++#endif
+ static void destroy_compound_page(struct page *page, unsigned long order)
+ {
+       int i;
+       int nr_pages = 1 << order;
+-      struct page *p = page + 1;
+       if (unlikely(compound_order(page) != order))
+               bad_page(page);
+@@ -293,9 +308,8 @@ static void destroy_compound_page(struct
+       if (unlikely(!PageHead(page)))
+                       bad_page(page);
+       __ClearPageHead(page);
+-      for (i = 1; i < nr_pages; i++, p++) {
+-              if (unlikely((i & (MAX_ORDER_NR_PAGES - 1)) == 0))
+-                      p = pfn_to_page(page_to_pfn(page) + i);
++      for (i = 1; i < nr_pages; i++) {
++              struct page *p = page + i;
+               if (unlikely(!PageTail(p) |
+                               (p->first_page != page)))
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:52 2008
+Message-Id: <20081112001552.076721366@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Andy Whitcroft <apw@shadowen.org>,
+ Jon Tollefson <kniht@linux.vnet.ibm.com>,
+ Mel Gorman <mel@csn.ul.ie>,
+ Nick Piggin <nickpiggin@yahoo.com.au>,
+ Christoph Lameter <cl@linux-foundation.org>
+Subject: [patch 09/49] hugetlbfs: handle pages higher order than MAX_ORDER
+Content-Disposition: inline; filename=hugetlbfs-handle-pages-higher-order-than-max_order.patch
+Content-Length: 4470
+Lines: 142
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Andy Whitcroft <apw@shadowen.org>
+
+commit 69d177c2fc702d402b17fdca2190d5a7e3ca55c5 upstream
+
+When working with hugepages, hugetlbfs assumes that those hugepages are
+smaller than MAX_ORDER.  Specifically it assumes that the mem_map is
+contigious and uses that to optimise access to the elements of the mem_map
+that represent the hugepage.  Gigantic pages (such as 16GB pages on
+powerpc) by definition are of greater order than MAX_ORDER (larger than
+MAX_ORDER_NR_PAGES in size).  This means that we can no longer make use of
+the buddy alloctor guarentees for the contiguity of the mem_map, which
+ensures that the mem_map is at least contigious for maximmally aligned
+areas of MAX_ORDER_NR_PAGES pages.
+
+This patch adds new mem_map accessors and iterator helpers which handle
+any discontiguity at MAX_ORDER_NR_PAGES boundaries.  It then uses these to
+implement gigantic page versions of copy_huge_page and clear_huge_page,
+and to allow follow_hugetlb_page handle gigantic pages.
+
+Signed-off-by: Andy Whitcroft <apw@shadowen.org>
+Cc: Jon Tollefson <kniht@linux.vnet.ibm.com>
+Cc: Mel Gorman <mel@csn.ul.ie>
+Cc: Nick Piggin <nickpiggin@yahoo.com.au>
+Cc: Christoph Lameter <cl@linux-foundation.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+
+---
+ mm/hugetlb.c  |   37 ++++++++++++++++++++++++++++++++++++-
+ mm/internal.h |   28 ++++++++++++++++++++++++++++
+ 2 files changed, 64 insertions(+), 1 deletion(-)
+
+--- a/mm/hugetlb.c
++++ b/mm/hugetlb.c
+@@ -353,11 +353,26 @@ static int vma_has_reserves(struct vm_ar
+       return 0;
+ }
++static void clear_gigantic_page(struct page *page,
++                      unsigned long addr, unsigned long sz)
++{
++      int i;
++      struct page *p = page;
++
++      might_sleep();
++      for (i = 0; i < sz/PAGE_SIZE; i++, p = mem_map_next(p, page, i)) {
++              cond_resched();
++              clear_user_highpage(p, addr + i * PAGE_SIZE);
++      }
++}
+ static void clear_huge_page(struct page *page,
+                       unsigned long addr, unsigned long sz)
+ {
+       int i;
++      if (unlikely(sz > MAX_ORDER_NR_PAGES))
++              return clear_gigantic_page(page, addr, sz);
++
+       might_sleep();
+       for (i = 0; i < sz/PAGE_SIZE; i++) {
+               cond_resched();
+@@ -365,12 +380,32 @@ static void clear_huge_page(struct page 
+       }
+ }
++static void copy_gigantic_page(struct page *dst, struct page *src,
++                         unsigned long addr, struct vm_area_struct *vma)
++{
++      int i;
++      struct hstate *h = hstate_vma(vma);
++      struct page *dst_base = dst;
++      struct page *src_base = src;
++      might_sleep();
++      for (i = 0; i < pages_per_huge_page(h); ) {
++              cond_resched();
++              copy_user_highpage(dst, src, addr + i*PAGE_SIZE, vma);
++
++              i++;
++              dst = mem_map_next(dst, dst_base, i);
++              src = mem_map_next(src, src_base, i);
++      }
++}
+ static void copy_huge_page(struct page *dst, struct page *src,
+                          unsigned long addr, struct vm_area_struct *vma)
+ {
+       int i;
+       struct hstate *h = hstate_vma(vma);
++      if (unlikely(pages_per_huge_page(h) > MAX_ORDER_NR_PAGES))
++              return copy_gigantic_page(dst, src, addr, vma);
++
+       might_sleep();
+       for (i = 0; i < pages_per_huge_page(h); i++) {
+               cond_resched();
+@@ -2113,7 +2148,7 @@ int follow_hugetlb_page(struct mm_struct
+ same_page:
+               if (pages) {
+                       get_page(page);
+-                      pages[i] = page + pfn_offset;
++                      pages[i] = mem_map_offset(page, pfn_offset);
+               }
+               if (vmas)
+--- a/mm/internal.h
++++ b/mm/internal.h
+@@ -54,6 +54,34 @@ static inline unsigned long page_order(s
+ }
+ /*
++ * Return the mem_map entry representing the 'offset' subpage within
++ * the maximally aligned gigantic page 'base'.  Handle any discontiguity
++ * in the mem_map at MAX_ORDER_NR_PAGES boundaries.
++ */
++static inline struct page *mem_map_offset(struct page *base, int offset)
++{
++      if (unlikely(offset >= MAX_ORDER_NR_PAGES))
++              return pfn_to_page(page_to_pfn(base) + offset);
++      return base + offset;
++}
++
++/*
++ * Iterator over all subpages withing the maximally aligned gigantic
++ * page 'base'.  Handle any discontiguity in the mem_map.
++ */
++static inline struct page *mem_map_next(struct page *iter,
++                                              struct page *base, int offset)
++{
++      if (unlikely((offset & (MAX_ORDER_NR_PAGES - 1)) == 0)) {
++              unsigned long pfn = page_to_pfn(base) + offset;
++              if (!pfn_valid(pfn))
++                      return NULL;
++              return pfn_to_page(pfn);
++      }
++      return iter + 1;
++}
++
++/*
+  * FLATMEM and DISCONTIGMEM configurations use alloc_bootmem_node,
+  * so all functions starting at paging_init should be marked __init
+  * in those cases. SPARSEMEM, however, allows for memory hotplug,
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:52 2008
+Message-Id: <20081112001552.250290632@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Mike Miller <mike.miller@hp.com>,
+ FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>,
+ Jens Axboe <jens.axboe@oracle.com>
+Subject: [patch 10/49] cciss: fix regression firmware not displayed in procfs
+Content-Disposition: inline; filename=cciss-fix-regression-firmware-not-displayed-in-procfs.patch
+Content-Length: 2205
+Lines: 70
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Mike Miller <mike.miller@hp.com>
+
+commit 22bece00dc1f28dd3374c55e464c9f02eb642876 upstream
+
+This regression was introduced by commit
+6ae5ce8e8d4de666f31286808d2285aa6a50fa40 ("cciss: remove redundant code").
+
+This patch fixes a regression where the controller firmware version is not
+displayed in procfs.  The previous patch would be called anytime something
+changed.  This will get called only once for each controller.
+
+Signed-off-by: Mike Miller <mike.miller@hp.com>
+Cc: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
+Cc: Jens Axboe <jens.axboe@oracle.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/block/cciss.c |   23 ++++++++++++++++++++++-
+ 1 file changed, 22 insertions(+), 1 deletion(-)
+
+--- a/drivers/block/cciss.c
++++ b/drivers/block/cciss.c
+@@ -3403,7 +3403,8 @@ static int __devinit cciss_init_one(stru
+       int i;
+       int j = 0;
+       int rc;
+-      int dac;
++      int dac, return_code;
++      InquiryData_struct *inq_buff = NULL;
+       i = alloc_cciss_hba();
+       if (i < 0)
+@@ -3509,6 +3510,25 @@ static int __devinit cciss_init_one(stru
+       /* Turn the interrupts on so we can service requests */
+       hba[i]->access.set_intr_mask(hba[i], CCISS_INTR_ON);
++      /* Get the firmware version */
++      inq_buff = kzalloc(sizeof(InquiryData_struct), GFP_KERNEL);
++      if (inq_buff == NULL) {
++              printk(KERN_ERR "cciss: out of memory\n");
++              goto clean4;
++      }
++
++      return_code = sendcmd_withirq(CISS_INQUIRY, i, inq_buff,
++              sizeof(InquiryData_struct), 0, 0 , 0, TYPE_CMD);
++      if (return_code == IO_OK) {
++              hba[i]->firm_ver[0] = inq_buff->data_byte[32];
++              hba[i]->firm_ver[1] = inq_buff->data_byte[33];
++              hba[i]->firm_ver[2] = inq_buff->data_byte[34];
++              hba[i]->firm_ver[3] = inq_buff->data_byte[35];
++      } else {         /* send command failed */
++              printk(KERN_WARNING "cciss: unable to determine firmware"
++                      " version of controller\n");
++      }
++
+       cciss_procinit(i);
+       hba[i]->cciss_max_sectors = 2048;
+@@ -3519,6 +3539,7 @@ static int __devinit cciss_init_one(stru
+       return 1;
+ clean4:
++      kfree(inq_buff);
+ #ifdef CONFIG_CISS_SCSI_TAPE
+       kfree(hba[i]->scsi_rejects.complete);
+ #endif
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:52 2008
+Message-Id: <20081112001552.440437005@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Mike Miller <mike.miller@hp.com>,
+ Jens Axboe <jens.axboe@oracle.com>
+Subject: [patch 11/49] cciss: fix sysfs broken symlink regression
+Content-Disposition: inline; filename=cciss-fix-sysfs-broken-symlink-regression.patch
+Content-Length: 1242
+Lines: 35
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Mike Miller <mike.miller@hp.com>
+
+commit 404443081ce5e6f68b5f7eda16c959835ff200c0 upstream
+
+Regression introduced by commit 6ae5ce8e8d4de666f31286808d2285aa6a50fa40
+("cciss: remove redundant code").
+
+This patch fixes a broken symlink in sysfs that was introduced by the
+above commit.  We broke it in 2.6.27-rc on or about 20080804.  Some
+installers are broken if this symlink does not exist and they may not
+detect the logical drives configured on the controller.  It does not
+require being backported into 2.6.26.x or earlier kernels.
+
+Signed-off-by: Mike Miller <mike.miller@hp.com>
+Cc: Jens Axboe <jens.axboe@oracle.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/block/cciss.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/block/cciss.c
++++ b/drivers/block/cciss.c
+@@ -1365,6 +1365,7 @@ static void cciss_add_disk(ctlr_info_t *
+       disk->first_minor = drv_index << NWD_SHIFT;
+       disk->fops = &cciss_fops;
+       disk->private_data = &h->drv[drv_index];
++      disk->driverfs_dev = &h->pdev->dev;
+       /* Set up queue information */
+       blk_queue_bounce_limit(disk->queue, h->pdev->dma_mask);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:52 2008
+Message-Id: <20081112001552.666836100@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Mike Miller <mike.miller@hp.com>,
+ Jens Axboe <jens.axboe@oracle.com>
+Subject: [patch 12/49] cciss: new hardware support
+Content-Disposition: inline; filename=cciss-new-hardware-support.patch
+Content-Length: 1732
+Lines: 52
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Mike Miller <mike.miller@hp.com>
+
+commit 77ca7286d10b798e4907af941f29672bf484db77 upstream
+
+cciss: new hardware support
+
+Add support for 2 new SAS/SATA controllers.
+
+Signed-off-by: Mike Miller <mike.miller@hp.com>
+Cc: Jens Axboe <jens.axboe@oracle.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ Documentation/cciss.txt |    2 ++
+ drivers/block/cciss.c   |    4 ++++
+ 2 files changed, 6 insertions(+)
+
+--- a/Documentation/cciss.txt
++++ b/Documentation/cciss.txt
+@@ -26,6 +26,8 @@ This driver is known to work with the fo
+       * SA P410i
+       * SA P411
+       * SA P812
++      * SA P712m
++      * SA P711m
+ Detecting drive failures:
+ -------------------------
+--- a/drivers/block/cciss.c
++++ b/drivers/block/cciss.c
+@@ -96,6 +96,8 @@ static const struct pci_device_id cciss_
+       {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3245},
+       {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3247},
+       {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3249},
++      {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x324A},
++      {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x324B},
+       {PCI_VENDOR_ID_HP,     PCI_ANY_ID,      PCI_ANY_ID, PCI_ANY_ID,
+               PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0},
+       {0,}
+@@ -133,6 +135,8 @@ static struct board_type products[] = {
+       {0x3245103C, "Smart Array P410i", &SA5_access},
+       {0x3247103C, "Smart Array P411", &SA5_access},
+       {0x3249103C, "Smart Array P812", &SA5_access},
++      {0x324A103C, "Smart Array P712m", &SA5_access},
++      {0x324B103C, "Smart Array P711m", &SA5_access},
+       {0xFFFF103C, "Unknown Smart Array", &SA5_access},
+ };
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:52 2008
+Message-Id: <20081112001552.840807024@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Andre Noll <maan@systemlinux.org>,
+ NeilBrown <neilb@suse.de>
+Subject: [patch 13/49] md: linear: Fix a division by zero bug for very small arrays.
+Content-Disposition: inline; filename=md-linear-fix-a-division-by-zero-bug-for-very-small-arrays.patch
+Content-Length: 1300
+Lines: 40
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Andre Noll <maan@systemlinux.org>
+
+commit f1cd14ae52985634d0389e934eba25b5ecf24565 upstream
+
+Date: Thu, 6 Nov 2008 19:41:24 +1100
+Subject: [patch 13/49] md: linear: Fix a division by zero bug for very small arrays.
+
+We currently oops with a divide error on starting a linear software
+raid array consisting of at least two very small (< 500K) devices.
+
+The bug is caused by the calculation of the hash table size which
+tries to compute sector_div(sz, base) with "base" being zero due to
+the small size of the component devices of the array.
+
+Fix this by requiring the hash spacing to be at least one which
+implies that also "base" is non-zero.
+
+This bug has existed since about 2.6.14.
+
+Signed-off-by: Andre Noll <maan@systemlinux.org>
+Signed-off-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/linear.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/md/linear.c
++++ b/drivers/md/linear.c
+@@ -157,6 +157,8 @@ static linear_conf_t *linear_conf(mddev_
+       min_spacing = conf->array_sectors / 2;
+       sector_div(min_spacing, PAGE_SIZE/sizeof(struct dev_info *));
++      if (min_spacing == 0)
++              min_spacing = 1;
+       /* min_spacing is the minimum spacing that will fit the hash
+        * table in one PAGE.  This may be much smaller than needed.
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:53 2008
+Message-Id: <20081112001553.005045497@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Thomas Backlund <tmb@mandriva.org>,
+ George Spelvin <linux@horizon.com>,
+ NeilBrown <neilb@suse.de>
+Subject: [patch 14/49] md: fix bug in raid10 recovery.
+Content-Disposition: inline; filename=md-fix-bug-in-raid10-recovery.patch
+Content-Length: 868
+Lines: 33
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Neil Brown <neilb@suse.de>
+
+commit a53a6c85756339f82ff19e001e90cfba2d6299a8 upstream
+
+Adding a spare to a raid10 doesn't cause recovery to start.
+This is due to an silly type in
+  commit 6c2fce2ef6b4821c21b5c42c7207cb9cf8c87eda
+and so is a bug in 2.6.27 and .28-rc.
+
+Thanks to Thomas Backlund for bisecting to find this.
+
+Cc: Thomas Backlund <tmb@mandriva.org>
+Cc: George Spelvin <linux@horizon.com>
+Signed-off-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/raid10.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/md/raid10.c
++++ b/drivers/md/raid10.c
+@@ -1132,7 +1132,7 @@ static int raid10_add_disk(mddev_t *mdde
+       if (!enough(conf))
+               return -EINVAL;
+-      if (rdev->raid_disk)
++      if (rdev->raid_disk >= 0)
+               first = last = rdev->raid_disk;
+       if (rdev->saved_raid_disk >= 0 &&
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:53 2008
+Message-Id: <20081112001553.208290602@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>,
+ Richard Purdie <rpurdie@openedhand.com>,
+ David Woodhouse <David.Woodhouse@intel.com>
+Subject: [patch 15/49] JFFS2: fix race condition in jffs2_lzo_compress()
+Content-Disposition: inline; filename=jffs2-fix-race-condition-in-jffs2_lzo_compress.patch
+Content-Length: 1722
+Lines: 61
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
+
+commit dc8a0843a435b2c0891e7eaea64faaf1ebec9b11 upstream
+
+deflate_mutex protects the globals lzo_mem and lzo_compress_buf.  However,
+jffs2_lzo_compress() unlocks deflate_mutex _before_ it has copied out the
+compressed data from lzo_compress_buf.  Correct this by moving the mutex
+unlock after the copy.
+
+In addition, document what deflate_mutex actually protects.
+
+Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
+Acked-by: Richard Purdie <rpurdie@openedhand.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/jffs2/compr_lzo.c |   15 +++++++++------
+ 1 file changed, 9 insertions(+), 6 deletions(-)
+
+--- a/fs/jffs2/compr_lzo.c
++++ b/fs/jffs2/compr_lzo.c
+@@ -19,7 +19,7 @@
+ static void *lzo_mem;
+ static void *lzo_compress_buf;
+-static DEFINE_MUTEX(deflate_mutex);
++static DEFINE_MUTEX(deflate_mutex);   /* for lzo_mem and lzo_compress_buf */
+ static void free_workspace(void)
+ {
+@@ -49,18 +49,21 @@ static int jffs2_lzo_compress(unsigned c
+       mutex_lock(&deflate_mutex);
+       ret = lzo1x_1_compress(data_in, *sourcelen, lzo_compress_buf, &compress_size, lzo_mem);
+-      mutex_unlock(&deflate_mutex);
+-
+       if (ret != LZO_E_OK)
+-              return -1;
++              goto fail;
+       if (compress_size > *dstlen)
+-              return -1;
++              goto fail;
+       memcpy(cpage_out, lzo_compress_buf, compress_size);
+-      *dstlen = compress_size;
++      mutex_unlock(&deflate_mutex);
++      *dstlen = compress_size;
+       return 0;
++
++ fail:
++      mutex_unlock(&deflate_mutex);
++      return -1;
+ }
+ static int jffs2_lzo_decompress(unsigned char *data_in, unsigned char *cpage_out,
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:53 2008
+Message-Id: <20081112001553.449773668@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ David Woodhouse <David.Woodhouse@intel.com>
+Subject: [patch 16/49] JFFS2: Fix lack of locking in thread_should_wake()
+Content-Disposition: inline; filename=jffs2-fix-lack-of-locking-in-thread_should_wake.patch
+Content-Length: 1421
+Lines: 42
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: David Woodhouse <David.Woodhouse@intel.com>
+
+commit b27cf88e9592953ae292d05324887f2f44979433 upstream
+
+The thread_should_wake() function trawls through the list of 'very
+dirty' eraseblocks, determining whether the background GC thread should
+wake. Doing this without holding the appropriate locks is a bad idea.
+
+OLPC Trac #8615
+
+Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/jffs2/background.c |   10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+--- a/fs/jffs2/background.c
++++ b/fs/jffs2/background.c
+@@ -85,15 +85,15 @@ static int jffs2_garbage_collect_thread(
+       for (;;) {
+               allow_signal(SIGHUP);
+       again:
++              spin_lock(&c->erase_completion_lock);
+               if (!jffs2_thread_should_wake(c)) {
+                       set_current_state (TASK_INTERRUPTIBLE);
++                      spin_unlock(&c->erase_completion_lock);
+                       D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread sleeping...\n"));
+-                      /* Yes, there's a race here; we checked jffs2_thread_should_wake()
+-                         before setting current->state to TASK_INTERRUPTIBLE. But it doesn't
+-                         matter - We don't care if we miss a wakeup, because the GC thread
+-                         is only an optimisation anyway. */
+                       schedule();
+-              }
++              } else
++                      spin_unlock(&c->erase_completion_lock);
++
+               /* This thread is purely an optimisation. But if it runs when
+                  other things could be running, it actually makes things a
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:53 2008
+Message-Id: <20081112001553.648076663@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Haavard Skinnemoen <haavard.skinnemoen@atmel.com>,
+ Lothar Wafmann <LW@KARO-electronics.de>,
+ Lennert Buytenhek <buytenh@marvell.com>,
+ Eric Miao <eric.miao@marvell.com>,
+ Dan Williams <dan.j.williams@intel.com>
+Subject: [patch 17/49] ARM: xsc3: fix xsc3_l2_inv_range
+Content-Disposition: inline; filename=arm-xsc3-fix-xsc3_l2_inv_range.patch
+Content-Length: 1489
+Lines: 48
+
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Dan Williams <dan.j.williams@intel.com>
+
+commit c7cf72dcadbe39c2077b32460f86c9f8167be3be upstream
+
+When 'start' and 'end' are less than a cacheline apart and 'start' is
+unaligned we are done after cleaning and invalidating the first
+cacheline.  So check for (start < end) which will not walk off into
+invalid address ranges when (start > end).
+
+This issue was caught by drivers/dma/dmatest.
+
+2.6.27 is susceptible.
+
+Cc: <stable@kernel.org>
+Cc: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
+Cc: Lothar Wafmann <LW@KARO-electronics.de>
+Cc: Lennert Buytenhek <buytenh@marvell.com>
+Cc: Eric Miao <eric.miao@marvell.com>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/arm/mm/cache-xsc3l2.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/arch/arm/mm/cache-xsc3l2.c
++++ b/arch/arm/mm/cache-xsc3l2.c
+@@ -97,7 +97,7 @@ static void xsc3_l2_inv_range(unsigned l
+       /*
+        * Clean and invalidate partial last cache line.
+        */
+-      if (end & (CACHE_LINE_SIZE - 1)) {
++      if (start < end && (end & (CACHE_LINE_SIZE - 1))) {
+               xsc3_l2_clean_pa(end & ~(CACHE_LINE_SIZE - 1));
+               xsc3_l2_inv_pa(end & ~(CACHE_LINE_SIZE - 1));
+               end &= ~(CACHE_LINE_SIZE - 1);
+@@ -106,7 +106,7 @@ static void xsc3_l2_inv_range(unsigned l
+       /*
+        * Invalidate all full cache lines between 'start' and 'end'.
+        */
+-      while (start != end) {
++      while (start < end) {
+               xsc3_l2_inv_pa(start);
+               start += CACHE_LINE_SIZE;
+       }
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:53 2008
+Message-Id: <20081112001553.827221918@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14:19 -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,
+ "Eric W. Biederman" <ebiederm@xmission.com>,
+ David Woodhouse <David.Woodhouse@intel.com>
+Subject: [patch 18/49] MTD: Fix cfi_send_gen_cmd handling of x16 devices in x8 mode (v4)
+Content-Disposition: inline; filename=mtd-fix-cfi_send_gen_cmd-handling-of-x16-devices-in-x8-mode.patch
+Content-Length: 4996
+Lines: 133
+
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Eric W. Biederman <ebiederm@xmission.com>
+
+commit 467622ef2acb01986eab37ef96c3632b3ea35999 upstream
+
+For "unlock" cycles to 16bit devices in 8bit compatibility mode we need
+to use the byte addresses 0xaaa and 0x555. These effectively match
+the word address 0x555 and 0x2aa, except the latter has its low bit set.
+
+Most chips don't care about the value of the 'A-1' pin in x8 mode,
+but some -- like the ST M29W320D -- do. So we need to be careful to
+set it where appropriate.
+
+cfi_send_gen_cmd is only ever passed addresses where the low byte
+is 0x00, 0x55 or 0xaa. Of those, only addresses ending 0xaa are
+affected by this patch, by masking in the extra low bit when the device
+is known to be in compatibility mode.
+
+[dwmw2: Do it only when (cmd_ofs & 0xff) == 0xaa]
+v4: Fix  stupid typo in cfi_build_cmd_addr that failed to compile
+    I'm writing this patch way to late at night.
+v3: Bring all of the work back into cfi_build_cmd_addr
+    including calling of map_bankwidth(map) and cfi_interleave(cfi)
+    So every caller doesn't need to.
+v2: Only modified the address if we our device_type is larger than our
+    bus width.
+
+Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
+Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/mtd/chips/cfi_cmdset_0002.c |   13 -------------
+ drivers/mtd/chips/jedec_probe.c     |   10 ++++------
+ include/linux/mtd/cfi.h             |   22 +++++++++++++++++++---
+ 3 files changed, 23 insertions(+), 22 deletions(-)
+
+--- a/drivers/mtd/chips/cfi_cmdset_0002.c
++++ b/drivers/mtd/chips/cfi_cmdset_0002.c
+@@ -362,19 +362,6 @@ struct mtd_info *cfi_cmdset_0002(struct 
+               /* Set the default CFI lock/unlock addresses */
+               cfi->addr_unlock1 = 0x555;
+               cfi->addr_unlock2 = 0x2aa;
+-              /* Modify the unlock address if we are in compatibility mode */
+-              if (    /* x16 in x8 mode */
+-                      ((cfi->device_type == CFI_DEVICETYPE_X8) &&
+-                              (cfi->cfiq->InterfaceDesc ==
+-                                      CFI_INTERFACE_X8_BY_X16_ASYNC)) ||
+-                      /* x32 in x16 mode */
+-                      ((cfi->device_type == CFI_DEVICETYPE_X16) &&
+-                              (cfi->cfiq->InterfaceDesc ==
+-                                      CFI_INTERFACE_X16_BY_X32_ASYNC)))
+-              {
+-                      cfi->addr_unlock1 = 0xaaa;
+-                      cfi->addr_unlock2 = 0x555;
+-              }
+       } /* CFI mode */
+       else if (cfi->cfi_mode == CFI_MODE_JEDEC) {
+--- a/drivers/mtd/chips/jedec_probe.c
++++ b/drivers/mtd/chips/jedec_probe.c
+@@ -1808,9 +1808,7 @@ static inline u32 jedec_read_mfr(struct 
+        * several first banks can contain 0x7f instead of actual ID
+        */
+       do {
+-              uint32_t ofs = cfi_build_cmd_addr(0 + (bank << 8),
+-                                                cfi_interleave(cfi),
+-                                                cfi->device_type);
++              uint32_t ofs = cfi_build_cmd_addr(0 + (bank << 8), map, cfi);
+               mask = (1 << (cfi->device_type * 8)) - 1;
+               result = map_read(map, base + ofs);
+               bank++;
+@@ -1824,7 +1822,7 @@ static inline u32 jedec_read_id(struct m
+ {
+       map_word result;
+       unsigned long mask;
+-      u32 ofs = cfi_build_cmd_addr(1, cfi_interleave(cfi), cfi->device_type);
++      u32 ofs = cfi_build_cmd_addr(1, map, cfi);
+       mask = (1 << (cfi->device_type * 8)) -1;
+       result = map_read(map, base + ofs);
+       return result.x[0] & mask;
+@@ -2067,8 +2065,8 @@ static int jedec_probe_chip(struct map_i
+       }
+       /* Ensure the unlock addresses we try stay inside the map */
+-      probe_offset1 = cfi_build_cmd_addr(cfi->addr_unlock1, cfi_interleave(cfi), cfi->device_type);
+-      probe_offset2 = cfi_build_cmd_addr(cfi->addr_unlock2, cfi_interleave(cfi), cfi->device_type);
++      probe_offset1 = cfi_build_cmd_addr(cfi->addr_unlock1, map, cfi);
++      probe_offset2 = cfi_build_cmd_addr(cfi->addr_unlock2, map, cfi);
+       if (    ((base + probe_offset1 + map_bankwidth(map)) >= map->size) ||
+               ((base + probe_offset2 + map_bankwidth(map)) >= map->size))
+               goto retry;
+--- a/include/linux/mtd/cfi.h
++++ b/include/linux/mtd/cfi.h
+@@ -281,9 +281,25 @@ struct cfi_private {
+ /*
+  * Returns the command address according to the given geometry.
+  */
+-static inline uint32_t cfi_build_cmd_addr(uint32_t cmd_ofs, int interleave, int type)
++static inline uint32_t cfi_build_cmd_addr(uint32_t cmd_ofs,
++                              struct map_info *map, struct cfi_private *cfi)
+ {
+-      return (cmd_ofs * type) * interleave;
++      unsigned bankwidth = map_bankwidth(map);
++      unsigned interleave = cfi_interleave(cfi);
++      unsigned type = cfi->device_type;
++      uint32_t addr;
++
++      addr = (cmd_ofs * type) * interleave;
++
++      /* Modify the unlock address if we are in compatiblity mode.
++       * For 16bit devices on 8 bit busses
++       * and 32bit devices on 16 bit busses
++       * set the low bit of the alternating bit sequence of the address.
++       */
++      if (((type * interleave) > bankwidth) && ((uint8_t)cmd_ofs == 0xaa))
++              addr |= (type >> 1)*interleave;
++
++      return  addr;
+ }
+ /*
+@@ -429,7 +445,7 @@ static inline uint32_t cfi_send_gen_cmd(
+                               int type, map_word *prev_val)
+ {
+       map_word val;
+-      uint32_t addr = base + cfi_build_cmd_addr(cmd_addr, cfi_interleave(cfi), type);
++      uint32_t addr = base + cfi_build_cmd_addr(cmd_addr, map, cfi);
+       val = cfi_build_cmd(cmd, map, cfi);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:54 2008
+Message-Id: <20081112001554.017819396@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14:20 -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,
+ Alok N Kataria <akataria@vmware.com>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [patch 19/49] x86: dont use tsc_khz to calculate lpj if notsc is passed
+Content-Disposition: inline; filename=x86-don-t-use-tsc_khz-to-calculate-lpj-if-notsc-is-passed.patch
+Content-Length: 1239
+Lines: 45
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Alok Kataria <akataria@vmware.com>
+
+commit 70de9a97049e0ba79dc040868564408d5ce697f9 upstream
+
+Impact: fix udelay when "notsc" boot parameter is passed
+
+With notsc passed on commandline, tsc may not be used for
+udelays, make sure that we do not use tsc_khz to calculate
+the lpj value in such cases.
+
+Reported-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
+Signed-off-by: Alok N Kataria <akataria@vmware.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/tsc.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/arch/x86/kernel/tsc.c
++++ b/arch/x86/kernel/tsc.c
+@@ -639,10 +639,6 @@ void __init tsc_init(void)
+               cpu_khz = calibrate_cpu();
+ #endif
+-      lpj = ((u64)tsc_khz * 1000);
+-      do_div(lpj, HZ);
+-      lpj_fine = lpj;
+-
+       printk("Detected %lu.%03lu MHz processor.\n",
+                       (unsigned long)cpu_khz / 1000,
+                       (unsigned long)cpu_khz % 1000);
+@@ -662,6 +658,10 @@ void __init tsc_init(void)
+       /* now allow native_sched_clock() to use rdtsc */
+       tsc_disabled = 0;
++      lpj = ((u64)tsc_khz * 1000);
++      do_div(lpj, HZ);
++      lpj_fine = lpj;
++
+       use_tsc_delay();
+       /* Check and install the TSC clocksource */
+       dmi_check_system(bad_tsc_dmi_table);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:54 2008
+Message-Id: <20081112001554.193107596@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Miklos Szeredi <mszeredi@suse.cz>
+Subject: [patch 20/49] net: unix: fix inflight counting bug in garbage collector
+Content-Disposition: inline; filename=net-unix-fix-inflight-counting-bug-in-garbage-collector.patch
+Content-Length: 6400
+Lines: 202
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Miklos Szeredi <mszeredi@suse.cz>
+
+commit 6209344f5a3795d34b7f2c0061f49802283b6bdd upstream
+
+Previously I assumed that the receive queues of candidates don't
+change during the GC.  This is only half true, nothing can be received
+from the queues (see comment in unix_gc()), but buffers could be added
+through the other half of the socket pair, which may still have file
+descriptors referring to it.
+
+This can result in inc_inflight_move_tail() erronously increasing the
+"inflight" counter for a unix socket for which dec_inflight() wasn't
+previously called.  This in turn can trigger the "BUG_ON(total_refs <
+inflight_refs)" in a later garbage collection run.
+
+Fix this by only manipulating the "inflight" counter for sockets which
+are candidates themselves.  Duplicating the file references in
+unix_attach_fds() is also needed to prevent a socket becoming a
+candidate for GC while the skb that contains it is not yet queued.
+
+Reported-by: Andrea Bittau <a.bittau@cs.ucl.ac.uk>
+Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/net/af_unix.h |    1 +
+ net/unix/af_unix.c    |   31 ++++++++++++++++++++++++-------
+ net/unix/garbage.c    |   49 +++++++++++++++++++++++++++++++++++++------------
+ 3 files changed, 62 insertions(+), 19 deletions(-)
+
+--- a/include/net/af_unix.h
++++ b/include/net/af_unix.h
+@@ -54,6 +54,7 @@ struct unix_sock {
+         atomic_long_t           inflight;
+         spinlock_t            lock;
+       unsigned int            gc_candidate : 1;
++      unsigned int            gc_maybe_cycle : 1;
+         wait_queue_head_t       peer_wait;
+ };
+ #define unix_sk(__sk) ((struct unix_sock *)__sk)
+--- a/net/unix/af_unix.c
++++ b/net/unix/af_unix.c
+@@ -1300,14 +1300,23 @@ static void unix_destruct_fds(struct sk_
+       sock_wfree(skb);
+ }
+-static void unix_attach_fds(struct scm_cookie *scm, struct sk_buff *skb)
++static int unix_attach_fds(struct scm_cookie *scm, struct sk_buff *skb)
+ {
+       int i;
++
++      /*
++       * Need to duplicate file references for the sake of garbage
++       * collection.  Otherwise a socket in the fps might become a
++       * candidate for GC while the skb is not yet queued.
++       */
++      UNIXCB(skb).fp = scm_fp_dup(scm->fp);
++      if (!UNIXCB(skb).fp)
++              return -ENOMEM;
++
+       for (i=scm->fp->count-1; i>=0; i--)
+               unix_inflight(scm->fp->fp[i]);
+-      UNIXCB(skb).fp = scm->fp;
+       skb->destructor = unix_destruct_fds;
+-      scm->fp = NULL;
++      return 0;
+ }
+ /*
+@@ -1366,8 +1375,11 @@ static int unix_dgram_sendmsg(struct kio
+               goto out;
+       memcpy(UNIXCREDS(skb), &siocb->scm->creds, sizeof(struct ucred));
+-      if (siocb->scm->fp)
+-              unix_attach_fds(siocb->scm, skb);
++      if (siocb->scm->fp) {
++              err = unix_attach_fds(siocb->scm, skb);
++              if (err)
++                      goto out_free;
++      }
+       unix_get_secdata(siocb->scm, skb);
+       skb_reset_transport_header(skb);
+@@ -1536,8 +1548,13 @@ static int unix_stream_sendmsg(struct ki
+               size = min_t(int, size, skb_tailroom(skb));
+               memcpy(UNIXCREDS(skb), &siocb->scm->creds, sizeof(struct ucred));
+-              if (siocb->scm->fp)
+-                      unix_attach_fds(siocb->scm, skb);
++              if (siocb->scm->fp) {
++                      err = unix_attach_fds(siocb->scm, skb);
++                      if (err) {
++                              kfree_skb(skb);
++                              goto out_err;
++                      }
++              }
+               if ((err = memcpy_fromiovec(skb_put(skb,size), msg->msg_iov, size)) != 0) {
+                       kfree_skb(skb);
+--- a/net/unix/garbage.c
++++ b/net/unix/garbage.c
+@@ -186,8 +186,17 @@ static void scan_inflight(struct sock *x
+                                */
+                               struct sock *sk = unix_get_socket(*fp++);
+                               if (sk) {
+-                                      hit = true;
+-                                      func(unix_sk(sk));
++                                      struct unix_sock *u = unix_sk(sk);
++
++                                      /*
++                                       * Ignore non-candidates, they could
++                                       * have been added to the queues after
++                                       * starting the garbage collection
++                                       */
++                                      if (u->gc_candidate) {
++                                              hit = true;
++                                              func(u);
++                                      }
+                               }
+                       }
+                       if (hit && hitlist != NULL) {
+@@ -249,11 +258,11 @@ static void inc_inflight_move_tail(struc
+ {
+       atomic_long_inc(&u->inflight);
+       /*
+-       * If this is still a candidate, move it to the end of the
+-       * list, so that it's checked even if it was already passed
+-       * over
++       * If this still might be part of a cycle, move it to the end
++       * of the list, so that it's checked even if it was already
++       * passed over
+        */
+-      if (u->gc_candidate)
++      if (u->gc_maybe_cycle)
+               list_move_tail(&u->link, &gc_candidates);
+ }
+@@ -267,6 +276,7 @@ void unix_gc(void)
+       struct unix_sock *next;
+       struct sk_buff_head hitlist;
+       struct list_head cursor;
++      LIST_HEAD(not_cycle_list);
+       spin_lock(&unix_gc_lock);
+@@ -282,10 +292,14 @@ void unix_gc(void)
+        *
+        * Holding unix_gc_lock will protect these candidates from
+        * being detached, and hence from gaining an external
+-       * reference.  This also means, that since there are no
+-       * possible receivers, the receive queues of these sockets are
+-       * static during the GC, even though the dequeue is done
+-       * before the detach without atomicity guarantees.
++       * reference.  Since there are no possible receivers, all
++       * buffers currently on the candidates' queues stay there
++       * during the garbage collection.
++       *
++       * We also know that no new candidate can be added onto the
++       * receive queues.  Other, non candidate sockets _can_ be
++       * added to queue, so we must make sure only to touch
++       * candidates.
+        */
+       list_for_each_entry_safe(u, next, &gc_inflight_list, link) {
+               long total_refs;
+@@ -299,6 +313,7 @@ void unix_gc(void)
+               if (total_refs == inflight_refs) {
+                       list_move_tail(&u->link, &gc_candidates);
+                       u->gc_candidate = 1;
++                      u->gc_maybe_cycle = 1;
+               }
+       }
+@@ -325,14 +340,24 @@ void unix_gc(void)
+               list_move(&cursor, &u->link);
+               if (atomic_long_read(&u->inflight) > 0) {
+-                      list_move_tail(&u->link, &gc_inflight_list);
+-                      u->gc_candidate = 0;
++                      list_move_tail(&u->link, &not_cycle_list);
++                      u->gc_maybe_cycle = 0;
+                       scan_children(&u->sk, inc_inflight_move_tail, NULL);
+               }
+       }
+       list_del(&cursor);
+       /*
++       * not_cycle_list contains those sockets which do not make up a
++       * cycle.  Restore these to the inflight list.
++       */
++      while (!list_empty(&not_cycle_list)) {
++              u = list_entry(not_cycle_list.next, struct unix_sock, link);
++              u->gc_candidate = 0;
++              list_move_tail(&u->link, &gc_inflight_list);
++      }
++
++      /*
+        * Now gc_candidates contains only garbage.  Restore original
+        * inflight counters for these as well, and remove the skbuffs
+        * which are creating the cycle(s).
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:54 2008
+Message-Id: <20081112001554.380363029@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Ivan Vecera <ivecera@redhat.com>,
+ Edward Hsu <edward_hsu@realtek.com.tw>,
+ Jeff Garzik <jgarzik@redhat.com>,
+ Martin Capitanio <martin@capitanio.org>,
+ Francois Romieu <romieu@fr.zoreil.com>
+Subject: [patch 21/49] r8169: get ethtool settings through the generic mii helper
+Content-Disposition: inline; filename=r8169-get-ethtool-settings-through-the-generic-mii-helper.patch
+Content-Length: 6826
+Lines: 224
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Francois Romieu <romieu@fr.zoreil.com>
+
+Upstream as ccdffb9a88b2907b159538d7bfd6256621db4f84 (post 2.6.27).
+
+It avoids to report unsupported link capabilities with
+the fast-ethernet only 8101/8102.
+
+Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
+Tested-by: Martin Capitanio <martin@capitanio.org>
+Fixed-by: Ivan Vecera <ivecera@redhat.com>
+Cc: Edward Hsu <edward_hsu@realtek.com.tw>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/r8169.c |   97 ++++++++++++++++++++++++----------------------------
+ 1 file changed, 45 insertions(+), 52 deletions(-)
+
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -370,8 +370,9 @@ struct ring_info {
+ };
+ enum features {
+-      RTL_FEATURE_WOL = (1 << 0),
+-      RTL_FEATURE_MSI = (1 << 1),
++      RTL_FEATURE_WOL         = (1 << 0),
++      RTL_FEATURE_MSI         = (1 << 1),
++      RTL_FEATURE_GMII        = (1 << 2),
+ };
+ struct rtl8169_private {
+@@ -406,13 +407,15 @@ struct rtl8169_private {
+       struct vlan_group *vlgrp;
+ #endif
+       int (*set_speed)(struct net_device *, u8 autoneg, u16 speed, u8 duplex);
+-      void (*get_settings)(struct net_device *, struct ethtool_cmd *);
++      int (*get_settings)(struct net_device *, struct ethtool_cmd *);
+       void (*phy_reset_enable)(void __iomem *);
+       void (*hw_start)(struct net_device *);
+       unsigned int (*phy_reset_pending)(void __iomem *);
+       unsigned int (*link_ok)(void __iomem *);
+       struct delayed_work task;
+       unsigned features;
++
++      struct mii_if_info mii;
+ };
+ MODULE_AUTHOR("Realtek and the Linux r8169 crew <netdev@vger.kernel.org>");
+@@ -482,6 +485,23 @@ static int mdio_read(void __iomem *ioadd
+       return value;
+ }
++static void rtl_mdio_write(struct net_device *dev, int phy_id, int location,
++                         int val)
++{
++      struct rtl8169_private *tp = netdev_priv(dev);
++      void __iomem *ioaddr = tp->mmio_addr;
++
++      mdio_write(ioaddr, location, val);
++}
++
++static int rtl_mdio_read(struct net_device *dev, int phy_id, int location)
++{
++      struct rtl8169_private *tp = netdev_priv(dev);
++      void __iomem *ioaddr = tp->mmio_addr;
++
++      return mdio_read(ioaddr, location);
++}
++
+ static void rtl8169_irq_mask_and_ack(void __iomem *ioaddr)
+ {
+       RTL_W16(IntrMask, 0x0000);
+@@ -850,7 +870,7 @@ static int rtl8169_rx_vlan_skb(struct rt
+ #endif
+-static void rtl8169_gset_tbi(struct net_device *dev, struct ethtool_cmd *cmd)
++static int rtl8169_gset_tbi(struct net_device *dev, struct ethtool_cmd *cmd)
+ {
+       struct rtl8169_private *tp = netdev_priv(dev);
+       void __iomem *ioaddr = tp->mmio_addr;
+@@ -867,65 +887,29 @@ static void rtl8169_gset_tbi(struct net_
+       cmd->speed = SPEED_1000;
+       cmd->duplex = DUPLEX_FULL; /* Always set */
++
++      return 0;
+ }
+-static void rtl8169_gset_xmii(struct net_device *dev, struct ethtool_cmd *cmd)
++static int rtl8169_gset_xmii(struct net_device *dev, struct ethtool_cmd *cmd)
+ {
+       struct rtl8169_private *tp = netdev_priv(dev);
+-      void __iomem *ioaddr = tp->mmio_addr;
+-      u8 status;
+-
+-      cmd->supported = SUPPORTED_10baseT_Half |
+-                       SUPPORTED_10baseT_Full |
+-                       SUPPORTED_100baseT_Half |
+-                       SUPPORTED_100baseT_Full |
+-                       SUPPORTED_1000baseT_Full |
+-                       SUPPORTED_Autoneg |
+-                       SUPPORTED_TP;
+-
+-      cmd->autoneg = 1;
+-      cmd->advertising = ADVERTISED_TP | ADVERTISED_Autoneg;
+-
+-      if (tp->phy_auto_nego_reg & ADVERTISE_10HALF)
+-              cmd->advertising |= ADVERTISED_10baseT_Half;
+-      if (tp->phy_auto_nego_reg & ADVERTISE_10FULL)
+-              cmd->advertising |= ADVERTISED_10baseT_Full;
+-      if (tp->phy_auto_nego_reg & ADVERTISE_100HALF)
+-              cmd->advertising |= ADVERTISED_100baseT_Half;
+-      if (tp->phy_auto_nego_reg & ADVERTISE_100FULL)
+-              cmd->advertising |= ADVERTISED_100baseT_Full;
+-      if (tp->phy_1000_ctrl_reg & ADVERTISE_1000FULL)
+-              cmd->advertising |= ADVERTISED_1000baseT_Full;
+-
+-      status = RTL_R8(PHYstatus);
+-
+-      if (status & _1000bpsF)
+-              cmd->speed = SPEED_1000;
+-      else if (status & _100bps)
+-              cmd->speed = SPEED_100;
+-      else if (status & _10bps)
+-              cmd->speed = SPEED_10;
+-
+-      if (status & TxFlowCtrl)
+-              cmd->advertising |= ADVERTISED_Asym_Pause;
+-      if (status & RxFlowCtrl)
+-              cmd->advertising |= ADVERTISED_Pause;
+-      cmd->duplex = ((status & _1000bpsF) || (status & FullDup)) ?
+-                    DUPLEX_FULL : DUPLEX_HALF;
++      return mii_ethtool_gset(&tp->mii, cmd);
+ }
+ static int rtl8169_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+ {
+       struct rtl8169_private *tp = netdev_priv(dev);
+       unsigned long flags;
++      int rc;
+       spin_lock_irqsave(&tp->lock, flags);
+-      tp->get_settings(dev, cmd);
++      rc = tp->get_settings(dev, cmd);
+       spin_unlock_irqrestore(&tp->lock, flags);
+-      return 0;
++      return rc;
+ }
+ static void rtl8169_get_regs(struct net_device *dev, struct ethtool_regs *regs,
+@@ -1513,7 +1497,7 @@ static const struct rtl_cfg_info {
+       unsigned int align;
+       u16 intr_event;
+       u16 napi_event;
+-      unsigned msi;
++      unsigned features;
+ } rtl_cfg_infos [] = {
+       [RTL_CFG_0] = {
+               .hw_start       = rtl_hw_start_8169,
+@@ -1522,7 +1506,7 @@ static const struct rtl_cfg_info {
+               .intr_event     = SYSErr | LinkChg | RxOverflow |
+                                 RxFIFOOver | TxErr | TxOK | RxOK | RxErr,
+               .napi_event     = RxFIFOOver | TxErr | TxOK | RxOK | RxOverflow,
+-              .msi            = 0
++              .features       = RTL_FEATURE_GMII
+       },
+       [RTL_CFG_1] = {
+               .hw_start       = rtl_hw_start_8168,
+@@ -1531,7 +1515,7 @@ static const struct rtl_cfg_info {
+               .intr_event     = SYSErr | LinkChg | RxOverflow |
+                                 TxErr | TxOK | RxOK | RxErr,
+               .napi_event     = TxErr | TxOK | RxOK | RxOverflow,
+-              .msi            = RTL_FEATURE_MSI
++              .features       = RTL_FEATURE_GMII | RTL_FEATURE_MSI
+       },
+       [RTL_CFG_2] = {
+               .hw_start       = rtl_hw_start_8101,
+@@ -1540,7 +1524,7 @@ static const struct rtl_cfg_info {
+               .intr_event     = SYSErr | LinkChg | RxOverflow | PCSTimeout |
+                                 RxFIFOOver | TxErr | TxOK | RxOK | RxErr,
+               .napi_event     = RxFIFOOver | TxErr | TxOK | RxOK | RxOverflow,
+-              .msi            = RTL_FEATURE_MSI
++              .features       = RTL_FEATURE_MSI
+       }
+ };
+@@ -1552,7 +1536,7 @@ static unsigned rtl_try_msi(struct pci_d
+       u8 cfg2;
+       cfg2 = RTL_R8(Config2) & ~MSIEnable;
+-      if (cfg->msi) {
++      if (cfg->features & RTL_FEATURE_MSI) {
+               if (pci_enable_msi(pdev)) {
+                       dev_info(&pdev->dev, "no MSI. Back to INTx.\n");
+               } else {
+@@ -1578,6 +1562,7 @@ rtl8169_init_one(struct pci_dev *pdev, c
+       const struct rtl_cfg_info *cfg = rtl_cfg_infos + ent->driver_data;
+       const unsigned int region = cfg->region;
+       struct rtl8169_private *tp;
++      struct mii_if_info *mii;
+       struct net_device *dev;
+       void __iomem *ioaddr;
+       unsigned int i;
+@@ -1602,6 +1587,14 @@ rtl8169_init_one(struct pci_dev *pdev, c
+       tp->pci_dev = pdev;
+       tp->msg_enable = netif_msg_init(debug.msg_enable, R8169_MSG_DEFAULT);
++      mii = &tp->mii;
++      mii->dev = dev;
++      mii->mdio_read = rtl_mdio_read;
++      mii->mdio_write = rtl_mdio_write;
++      mii->phy_id_mask = 0x1f;
++      mii->reg_num_mask = 0x1f;
++      mii->supports_gmii = !!(cfg->features & RTL_FEATURE_GMII);
++
+       /* enable device (incl. PCI PM wakeup and hotplug setup) */
+       rc = pci_enable_device(pdev);
+       if (rc < 0) {
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:54 2008
+Message-Id: <20081112001554.571216896@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Ivan Vecera <ivecera@redhat.com>,
+ Edward Hsu <edward_hsu@realtek.com.tw>,
+ Jeff Garzik <jgarzik@redhat.com>,
+ Martin Capitanio <martin@capitanio.org>,
+ Francois Romieu <romieu@fr.zoreil.com>
+Subject: [patch 22/49] r8169: fix RxMissed register access
+Content-Disposition: inline; filename=r8169-fix-rxmissed-register-access.patch
+Content-Length: 2400
+Lines: 94
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Francois Romieu <romieu@fr.zoreil.com>
+
+Upstream as 523a609496dbc3897e530db2a2f27650d125ea00
+
+- the register is defined for the 8169 chipset only and there is
+  no 8169 beyond RTL_GIGA_MAC_VER_06.
+- only the lower 3 bytes of the register are valid
+
+Fixes:
+1. http://bugzilla.kernel.org/show_bug.cgi?id=10180
+2. http://bugzilla.kernel.org/show_bug.cgi?id=11062 (bits of)
+
+Tested by Hermann Gausterer and Adam Huffman.
+
+Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
+Cc: Edward Hsu <edward_hsu@realtek.com.tw>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/r8169.c |   25 ++++++++++++++-----------
+ 1 file changed, 14 insertions(+), 11 deletions(-)
+
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -2092,8 +2092,6 @@ static void rtl_hw_start_8168(struct net
+       RTL_R8(IntrMask);
+-      RTL_W32(RxMissed, 0);
+-
+       rtl_set_rx_mode(dev);
+       RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
+@@ -2136,8 +2134,6 @@ static void rtl_hw_start_8101(struct net
+       RTL_R8(IntrMask);
+-      RTL_W32(RxMissed, 0);
+-
+       rtl_set_rx_mode(dev);
+       RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
+@@ -2915,6 +2911,17 @@ static int rtl8169_poll(struct napi_stru
+       return work_done;
+ }
++static void rtl8169_rx_missed(struct net_device *dev, void __iomem *ioaddr)
++{
++      struct rtl8169_private *tp = netdev_priv(dev);
++
++      if (tp->mac_version > RTL_GIGA_MAC_VER_06)
++              return;
++
++      dev->stats.rx_missed_errors += (RTL_R32(RxMissed) & 0xffffff);
++      RTL_W32(RxMissed, 0);
++}
++
+ static void rtl8169_down(struct net_device *dev)
+ {
+       struct rtl8169_private *tp = netdev_priv(dev);
+@@ -2932,9 +2939,7 @@ core_down:
+       rtl8169_asic_down(ioaddr);
+-      /* Update the error counts. */
+-      dev->stats.rx_missed_errors += RTL_R32(RxMissed);
+-      RTL_W32(RxMissed, 0);
++      rtl8169_rx_missed(dev, ioaddr);
+       spin_unlock_irq(&tp->lock);
+@@ -3056,8 +3061,7 @@ static struct net_device_stats *rtl8169_
+       if (netif_running(dev)) {
+               spin_lock_irqsave(&tp->lock, flags);
+-              dev->stats.rx_missed_errors += RTL_R32(RxMissed);
+-              RTL_W32(RxMissed, 0);
++              rtl8169_rx_missed(dev, ioaddr);
+               spin_unlock_irqrestore(&tp->lock, flags);
+       }
+@@ -3082,8 +3086,7 @@ static int rtl8169_suspend(struct pci_de
+       rtl8169_asic_down(ioaddr);
+-      dev->stats.rx_missed_errors += RTL_R32(RxMissed);
+-      RTL_W32(RxMissed, 0);
++      rtl8169_rx_missed(dev, ioaddr);
+       spin_unlock_irq(&tp->lock);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:54 2008
+Message-Id: <20081112001554.751218195@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Ivan Vecera <ivecera@redhat.com>,
+ Edward Hsu <edward_hsu@realtek.com.tw>,
+ Martin Capitanio <martin@capitanio.org>,
+ Chiaki Ishikawa <chiaki.ishikawa@ubin.jp>,
+ Jeff Garzik <jgarzik@redhat.com>,
+ RyanKao <ryankao@realtek.com.tw>,
+ Francois Romieu <romieu@fr.zoreil.com>
+Subject: [patch 23/49] r8169: wake up the PHY of the 8168
+Content-Disposition: inline; filename=r8169-wake-up-the-phy-of-the-8168.patch
+Content-Length: 1239
+Lines: 39
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Francois Romieu <romieu@fr.zoreil.com>
+
+Upstream as a2de6b89b74b28052e293fdb39975a5a03c432e0
+
+This is typically needed when some other OS puts the PHY
+to sleep due to the disabling of WOL options in the BIOS
+of the system.
+
+Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
+Tested-by: Chiaki Ishikawa <chiaki.ishikawa@ubin.jp>
+Cc: Edward Hsu <edward_hsu@realtek.com.tw>
+Cc: RyanKao <ryankao@realtek.com.tw>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/r8169.c |   10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -740,9 +740,13 @@ static int rtl8169_set_speed_xmii(struct
+       auto_nego |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
+-      if ((tp->mac_version == RTL_GIGA_MAC_VER_12) ||
+-          (tp->mac_version == RTL_GIGA_MAC_VER_17)) {
+-              /* Vendor specific (0x1f) and reserved (0x0e) MII registers. */
++      if ((tp->mac_version == RTL_GIGA_MAC_VER_11) ||
++          (tp->mac_version == RTL_GIGA_MAC_VER_12) ||
++          (tp->mac_version >= RTL_GIGA_MAC_VER_17)) {
++              /*
++               * Wake up the PHY.
++               * Vendor specific (0x1f) and reserved (0x0e) MII registers.
++               */
+               mdio_write(ioaddr, 0x1f, 0x0000);
+               mdio_write(ioaddr, 0x0e, 0x0000);
+       }
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:55 2008
+Message-Id: <20081112001554.936277120@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Maciej Sosnowski <maciej.sosnowski@intel.com>,
+ Dan Williams <dan.j.williams@intel.com>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 24/49] I/OAT: fix channel resources free for not allocated channels
+Content-Disposition: inline; filename=i-oat-fix-channel-resources-free-for-not-allocated-channels.patch
+Content-Length: 1393
+Lines: 43
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Maciej Sosnowski <maciej.sosnowski@intel.com>
+
+commit c3d4f44f50b65b0b0290e357f8739cfb3f4bcaca upstream
+
+If the ioatdma driver is loaded but not used it does not allocate descriptors.
+Before it frees channel resources it should first be sure
+that they have been previously allocated.
+
+Signed-off-by: Maciej Sosnowski <maciej.sosnowski@intel.com>
+Tested-by: Tom Picard <tom.s.picard@intel.com>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/dma/ioat_dma.c |    7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/dma/ioat_dma.c
++++ b/drivers/dma/ioat_dma.c
+@@ -801,6 +801,12 @@ static void ioat_dma_free_chan_resources
+       struct ioat_desc_sw *desc, *_desc;
+       int in_use_descs = 0;
++      /* Before freeing channel resources first check
++       * if they have been previously allocated for this channel.
++       */
++      if (ioat_chan->desccount == 0)
++              return;
++
+       tasklet_disable(&ioat_chan->cleanup_task);
+       ioat_dma_memcpy_cleanup(ioat_chan);
+@@ -863,6 +869,7 @@ static void ioat_dma_free_chan_resources
+       ioat_chan->last_completion = ioat_chan->completion_addr = 0;
+       ioat_chan->pending = 0;
+       ioat_chan->dmacount = 0;
++      ioat_chan->desccount = 0;
+       ioat_chan->watchdog_completion = 0;
+       ioat_chan->last_compl_desc_addr_hw = 0;
+       ioat_chan->watchdog_tcp_cookie =
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:55 2008
+Message-Id: <20081112001555.151866392@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Maciej Sosnowski <maciej.sosnowski@intel.com>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 25/49] I/OAT: fix dma_pin_iovec_pages() error handling
+Content-Disposition: inline; filename=i-oat-fix-dma_pin_iovec_pages-error-handling.patch
+Content-Length: 2313
+Lines: 80
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Maciej Sosnowski <maciej.sosnowski@intel.com>
+
+commit c2c0b4c5434c0a25f7f7796b29155d53805909f5 upstream
+
+Error handling needs to be modified in dma_pin_iovec_pages().
+It should return NULL instead of ERR_PTR
+(pinned_list is checked for NULL in tcp_recvmsg() to determine
+if iovec pages have been successfully pinned down).
+In case of error for the first iovec,
+local_list->nr_iovecs needs to be initialized.
+
+Signed-off-by: Maciej Sosnowski <maciej.sosnowski@intel.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/dma/iovlock.c |   17 ++++++-----------
+ 1 file changed, 6 insertions(+), 11 deletions(-)
+
+--- a/drivers/dma/iovlock.c
++++ b/drivers/dma/iovlock.c
+@@ -55,7 +55,6 @@ struct dma_pinned_list *dma_pin_iovec_pa
+       int nr_iovecs = 0;
+       int iovec_len_used = 0;
+       int iovec_pages_used = 0;
+-      long err;
+       /* don't pin down non-user-based iovecs */
+       if (segment_eq(get_fs(), KERNEL_DS))
+@@ -72,23 +71,21 @@ struct dma_pinned_list *dma_pin_iovec_pa
+       local_list = kmalloc(sizeof(*local_list)
+               + (nr_iovecs * sizeof (struct dma_page_list))
+               + (iovec_pages_used * sizeof (struct page*)), GFP_KERNEL);
+-      if (!local_list) {
+-              err = -ENOMEM;
++      if (!local_list)
+               goto out;
+-      }
+       /* list of pages starts right after the page list array */
+       pages = (struct page **) &local_list->page_list[nr_iovecs];
++      local_list->nr_iovecs = 0;
++
+       for (i = 0; i < nr_iovecs; i++) {
+               struct dma_page_list *page_list = &local_list->page_list[i];
+               len -= iov[i].iov_len;
+-              if (!access_ok(VERIFY_WRITE, iov[i].iov_base, iov[i].iov_len)) {
+-                      err = -EFAULT;
++              if (!access_ok(VERIFY_WRITE, iov[i].iov_base, iov[i].iov_len))
+                       goto unpin;
+-              }
+               page_list->nr_pages = num_pages_spanned(&iov[i]);
+               page_list->base_address = iov[i].iov_base;
+@@ -109,10 +106,8 @@ struct dma_pinned_list *dma_pin_iovec_pa
+                       NULL);
+               up_read(&current->mm->mmap_sem);
+-              if (ret != page_list->nr_pages) {
+-                      err = -ENOMEM;
++              if (ret != page_list->nr_pages)
+                       goto unpin;
+-              }
+               local_list->nr_iovecs = i + 1;
+       }
+@@ -122,7 +117,7 @@ struct dma_pinned_list *dma_pin_iovec_pa
+ unpin:
+       dma_unpin_iovec_pages(local_list);
+ out:
+-      return ERR_PTR(err);
++      return NULL;
+ }
+ void dma_unpin_iovec_pages(struct dma_pinned_list *pinned_list)
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:55 2008
+Message-Id: <20081112001555.319009841@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14:27 -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,
+ Maciej Sosnowski <maciej.sosnowski@intel.com>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 26/49] I/OAT: fix async_tx.callback checking
+Content-Disposition: inline; filename=i-oat-fix-async_tx.callback-checking.patch
+Content-Length: 1096
+Lines: 37
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Maciej Sosnowski <maciej.sosnowski@intel.com>
+
+commit 12ccea24e309d815d058cdc6ee8bf2c4b85f0c5f upstream
+
+async_tx.callback should be checked for the first
+not the last descriptor in the chain.
+
+Signed-off-by: Maciej Sosnowski <maciej.sosnowski@intel.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/dma/ioat_dma.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/dma/ioat_dma.c
++++ b/drivers/dma/ioat_dma.c
+@@ -519,7 +519,7 @@ static dma_cookie_t ioat1_tx_submit(stru
+       }
+       hw->ctl = IOAT_DMA_DESCRIPTOR_CTL_CP_STS;
+-      if (new->async_tx.callback) {
++      if (first->async_tx.callback) {
+               hw->ctl |= IOAT_DMA_DESCRIPTOR_CTL_INT_GN;
+               if (first != new) {
+                       /* move callback into to last desc */
+@@ -611,7 +611,7 @@ static dma_cookie_t ioat2_tx_submit(stru
+       }
+       hw->ctl |= IOAT_DMA_DESCRIPTOR_CTL_CP_STS;
+-      if (new->async_tx.callback) {
++      if (first->async_tx.callback) {
+               hw->ctl |= IOAT_DMA_DESCRIPTOR_CTL_INT_GN;
+               if (first != new) {
+                       /* move callback into to last desc */
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:55 2008
+Message-Id: <20081112001555.500632784@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Maciej Sosnowski <maciej.sosnowski@intel.com>,
+ Dan Williams <dan.j.williams@intel.com>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [patch 27/49] dca: fixup initialization dependency
+Content-Disposition: inline; filename=dca-fixup-initialization-dependency.patch
+Content-Length: 813
+Lines: 29
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Dan Williams <dan.j.williams@intel.com>
+
+commit 1207e795568a368928dfd23d6817e47f2e8097e3 upstream
+
+Mark dca_init as a subsys_initcall since it needs to be ready to go
+before dependent drivers start registering themselves.
+
+Reported-and-tested-by: Mark Rustad <mark_rustad@Xiotech.com>
+Acked-by: Maciej Sosnowski <maciej.sosnowski@intel.com>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/dca/dca-core.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/dca/dca-core.c
++++ b/drivers/dca/dca-core.c
+@@ -270,6 +270,6 @@ static void __exit dca_exit(void)
+       dca_sysfs_exit();
+ }
+-module_init(dca_init);
++subsys_initcall(dca_init);
+ module_exit(dca_exit);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:55 2008
+Message-Id: <20081112001555.684221061@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Ron Rindjunsky <ron.rindjunsky@intel.com>,
+ Esti Kummer <ester.kummer@intel.com>,
+ Tomas Winkler <tomas.winkler@intel.com>,
+ Zhu Yi <yi.zhu@intel.com>,
+ "John W. Linville" <linville@tuxdriver.com>
+Subject: [patch 28/49] iwlwifi: allow consecutive scans in unassociated state
+Content-Disposition: inline; filename=iwlwifi-allow-consecutive-scans-in-unassociated-state.patch
+Content-Length: 1482
+Lines: 41
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Ron Rindjunsky <ron.rindjunsky@intel.com>
+
+commit 681c0050ea3ac2e90c83d5af397d73eed848a372 upstream
+
+This patch allows consecutive scans requests when driver is in
+unassociated state.
+
+Signed-off-by: Ron Rindjunsky <ron.rindjunsky@intel.com>
+Signed-off-by: Esti Kummer <ester.kummer@intel.com>
+Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
+Signed-off-by: Zhu Yi <yi.zhu@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlwifi/iwl-agn.c |    8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
+@@ -3214,13 +3214,15 @@ static int iwl4965_mac_hw_scan(struct ie
+       /* we don't schedule scan within next_scan_jiffies period */
+       if (priv->next_scan_jiffies &&
+-                      time_after(priv->next_scan_jiffies, jiffies)) {
++          time_after(priv->next_scan_jiffies, jiffies)) {
++              IWL_DEBUG_SCAN("scan rejected: within next scan period\n");
+               rc = -EAGAIN;
+               goto out_unlock;
+       }
+       /* if we just finished scan ask for delay */
+-      if (priv->last_scan_jiffies && time_after(priv->last_scan_jiffies +
+-                              IWL_DELAY_NEXT_SCAN, jiffies)) {
++      if (iwl_is_associated(priv) && priv->last_scan_jiffies &&
++          time_after(priv->last_scan_jiffies + IWL_DELAY_NEXT_SCAN, jiffies)) {
++              IWL_DEBUG_SCAN("scan rejected: within previous scan period\n");
+               rc = -EAGAIN;
+               goto out_unlock;
+       }
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:56 2008
+Message-Id: <20081112001555.895270371@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Emmanuel Grumbach <emmanuel.grumbach@intel.com>,
+ Mohamed Abbas <mohamed.abbas@intel.com>,
+ Tomas Winkler <tomas.winkler@intel.com>,
+ Zhu Yi <yi.zhu@intel.com>,
+ "John W. Linville" <linville@tuxdriver.com>
+Subject: [patch 29/49] iwlwifi: allow association on radar channel in power save
+Content-Disposition: inline; filename=iwlwifi-allow-association-on-radar-channel-in-power-save.patch
+Content-Length: 6324
+Lines: 179
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+
+commit c90a74bae10dc2a4677d1bd06b6400db229d3e1e upstream
+
+This patch disables power save upon association and enables it back
+after association. This allows to associate to AP on a radar channel
+if power save is enabled.
+
+Radar and passive channels are not allowed for TX (required for association)
+unless RX is received but PS may close the radio and no RX will be received
+effectively failing association.
+
+Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Signed-off-by: Mohamed Abbas <mohamed.abbas@intel.com>
+Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
+Signed-off-by: Zhu Yi <yi.zhu@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlwifi/iwl-agn.c   |   24 +++++++++++++++----
+ drivers/net/wireless/iwlwifi/iwl-dev.h   |    1 
+ drivers/net/wireless/iwlwifi/iwl-power.c |   39 ++++++++++++++++++++++++++++++-
+ drivers/net/wireless/iwlwifi/iwl-power.h |    4 ++-
+ 4 files changed, 61 insertions(+), 7 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
+@@ -2486,6 +2486,7 @@ static void iwl4965_post_associate(struc
+       if (!priv->vif || !priv->is_open)
+               return;
++      iwl_power_cancel_timeout(priv);
+       iwl_scan_cancel_timeout(priv, 200);
+       conf = ieee80211_get_hw_conf(priv->hw);
+@@ -2550,10 +2551,6 @@ static void iwl4965_post_associate(struc
+               break;
+       }
+-      /* Enable Rx differential gain and sensitivity calibrations */
+-      iwl_chain_noise_reset(priv);
+-      priv->start_calib = 1;
+-
+       if (priv->iw_mode == IEEE80211_IF_TYPE_IBSS)
+               priv->assoc_station_added = 1;
+@@ -2561,7 +2558,12 @@ static void iwl4965_post_associate(struc
+       iwl_activate_qos(priv, 0);
+       spin_unlock_irqrestore(&priv->lock, flags);
+-      iwl_power_update_mode(priv, 0);
++      iwl_power_enable_management(priv);
++
++      /* Enable Rx differential gain and sensitivity calibrations */
++      iwl_chain_noise_reset(priv);
++      priv->start_calib = 1;
++
+       /* we have just associated, don't start scan too early */
+       priv->next_scan_jiffies = jiffies + IWL_DELAY_NEXT_SCAN;
+ }
+@@ -3548,6 +3550,16 @@ static void iwl4965_mac_reset_tsf(struct
+       /* Per mac80211.h: This is only used in IBSS mode... */
+       if (priv->iw_mode != IEEE80211_IF_TYPE_IBSS) {
++              /* switch to CAM during association period.
++               * the ucode will block any association/authentication
++               * frome during assiciation period if it can not hear
++               * the AP because of PM. the timer enable PM back is
++               * association do not complete
++               */
++              if (priv->hw->conf.channel->flags & (IEEE80211_CHAN_PASSIVE_SCAN |
++                                                   IEEE80211_CHAN_RADAR))
++                              iwl_power_disable_management(priv, 3000);
++
+               IWL_DEBUG_MAC80211("leave - not in IBSS\n");
+               mutex_unlock(&priv->mutex);
+               return;
+@@ -4085,6 +4097,7 @@ static void iwl_setup_deferred_work(stru
+       /* FIXME : remove when resolved PENDING */
+       INIT_WORK(&priv->scan_completed, iwl_bg_scan_completed);
+       iwl_setup_scan_deferred_work(priv);
++      iwl_setup_power_deferred_work(priv);
+       if (priv->cfg->ops->lib->setup_deferred_work)
+               priv->cfg->ops->lib->setup_deferred_work(priv);
+@@ -4104,6 +4117,7 @@ static void iwl_cancel_deferred_work(str
+       cancel_delayed_work_sync(&priv->init_alive_start);
+       cancel_delayed_work(&priv->scan_check);
++      cancel_delayed_work_sync(&priv->set_power_save);
+       cancel_delayed_work(&priv->alive_start);
+       cancel_work_sync(&priv->beacon_update);
+       del_timer_sync(&priv->statistics_periodic);
+--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
++++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
+@@ -1047,6 +1047,7 @@ struct iwl_priv {
+       struct tasklet_struct irq_tasklet;
++      struct delayed_work set_power_save;
+       struct delayed_work init_alive_start;
+       struct delayed_work alive_start;
+       struct delayed_work scan_check;
+--- a/drivers/net/wireless/iwlwifi/iwl-power.c
++++ b/drivers/net/wireless/iwlwifi/iwl-power.c
+@@ -324,7 +324,7 @@ EXPORT_SYMBOL(iwl_power_update_mode);
+  * this will be usefull for rate scale to disable PM during heavy
+  * Tx/Rx activities
+  */
+-int iwl_power_disable_management(struct iwl_priv *priv)
++int iwl_power_disable_management(struct iwl_priv *priv, u32 ms)
+ {
+       u16 prev_mode;
+       int ret = 0;
+@@ -337,6 +337,11 @@ int iwl_power_disable_management(struct 
+       ret = iwl_power_update_mode(priv, 0);
+       priv->power_data.power_disabled = 1;
+       priv->power_data.user_power_setting = prev_mode;
++      cancel_delayed_work(&priv->set_power_save);
++      if (ms)
++              queue_delayed_work(priv->workqueue, &priv->set_power_save,
++                                 msecs_to_jiffies(ms));
++
+       return ret;
+ }
+@@ -431,3 +436,35 @@ int iwl_power_temperature_change(struct 
+       return ret;
+ }
+ EXPORT_SYMBOL(iwl_power_temperature_change);
++
++static void iwl_bg_set_power_save(struct work_struct *work)
++{
++      struct iwl_priv *priv = container_of(work,
++                              struct iwl_priv, set_power_save.work);
++      IWL_DEBUG(IWL_DL_STATE, "update power\n");
++
++      if (test_bit(STATUS_EXIT_PENDING, &priv->status))
++              return;
++
++      mutex_lock(&priv->mutex);
++
++      /* on starting association we disable power managment
++       * until association, if association failed then this
++       * timer will expire and enable PM again.
++       */
++      if (!iwl_is_associated(priv))
++              iwl_power_enable_management(priv);
++
++      mutex_unlock(&priv->mutex);
++}
++void iwl_setup_power_deferred_work(struct iwl_priv *priv)
++{
++      INIT_DELAYED_WORK(&priv->set_power_save, iwl_bg_set_power_save);
++}
++EXPORT_SYMBOL(iwl_setup_power_deferred_work);
++
++void iwl_power_cancel_timeout(struct iwl_priv *priv)
++{
++      cancel_delayed_work(&priv->set_power_save);
++}
++EXPORT_SYMBOL(iwl_power_cancel_timeout);
+--- a/drivers/net/wireless/iwlwifi/iwl-power.h
++++ b/drivers/net/wireless/iwlwifi/iwl-power.h
+@@ -78,8 +78,10 @@ struct iwl_power_mgr {
+       u8 power_disabled; /* flag to disable using power saving level */
+ };
++void iwl_setup_power_deferred_work(struct iwl_priv *priv);
++void iwl_power_cancel_timeout(struct iwl_priv *priv);
+ int iwl_power_update_mode(struct iwl_priv *priv, u8 refresh);
+-int iwl_power_disable_management(struct iwl_priv *priv);
++int iwl_power_disable_management(struct iwl_priv *priv, u32 ms);
+ int iwl_power_enable_management(struct iwl_priv *priv);
+ int iwl_power_set_user_mode(struct iwl_priv *priv, u16 mode);
+ int iwl_power_set_system_mode(struct iwl_priv *priv, u16 mode);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:56 2008
+Message-Id: <20081112001556.084678523@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Emmanuel Grumbach <emmanuel.grumbach@intel.com>,
+ Zhu Yi <yi.zhu@intel.com>,
+ "John W. Linville" <linville@tuxdriver.com>
+Subject: [patch 30/49] iwlwifi: remove HT flags from RXON when not in HT anymore
+Content-Disposition: inline; filename=iwlwifi-remove-ht-flags-from-rxon-when-not-in-ht-anymore.patch
+Content-Length: 2031
+Lines: 56
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+
+commit 42eb7c644afcdbcd7eac4d862046230856fbf531 upstream.
+
+This patch removes the HT flags from RXON when moving from HT to legacy.
+This avoids keeping those flags set and possibly miss configuring firmware.
+
+If we are configured in HT, fat channel: channel 1 above, and move later
+to legacy channel 11, we need to clear the FAT channel control flags in
+RXON. If we don't, the firmware will understand this as channel 11 above
+which is not possible due to regulatory constraints, leading to firmware
+crash.
+
+Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Reviewed-by: Tomas Winkler <tomas.winkler@intel.com>
+Signed-off-by: Zhu Yi <yi.zhu@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlwifi/iwl-agn.c  |    3 +--
+ drivers/net/wireless/iwlwifi/iwl-core.c |    8 +++++++-
+ 2 files changed, 8 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
+@@ -2504,8 +2504,7 @@ static void iwl4965_post_associate(struc
+       priv->staging_rxon.filter_flags |= RXON_FILTER_ASSOC_MSK;
+-      if (priv->current_ht_config.is_ht)
+-              iwl_set_rxon_ht(priv, &priv->current_ht_config);
++      iwl_set_rxon_ht(priv, &priv->current_ht_config);
+       iwl_set_rxon_chain(priv);
+       priv->staging_rxon.assoc_id = cpu_to_le16(priv->assoc_id);
+--- a/drivers/net/wireless/iwlwifi/iwl-core.c
++++ b/drivers/net/wireless/iwlwifi/iwl-core.c
+@@ -646,8 +646,14 @@ void iwl_set_rxon_ht(struct iwl_priv *pr
+       struct iwl_rxon_cmd *rxon = &priv->staging_rxon;
+       u32 val;
+-      if (!ht_info->is_ht)
++      if (!ht_info->is_ht) {
++              rxon->flags &= ~(RXON_FLG_CHANNEL_MODE_MIXED_MSK |
++                      RXON_FLG_CHANNEL_MODE_PURE_40_MSK |
++                      RXON_FLG_CTRL_CHANNEL_LOC_HI_MSK |
++                      RXON_FLG_FAT_PROT_MSK |
++                      RXON_FLG_HT_PROT_MSK);
+               return;
++      }
+       /* Set up channel bandwidth:  20 MHz only, or 20/40 mixed if fat ok */
+       if (iwl_is_fat_tx_allowed(priv, NULL))
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:56 2008
+Message-Id: <20081112001556.291114536@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Tomas Winkler <tomas.winkler@intel.com>,
+ Zhu Yi <yi.zhu@intel.com>,
+ "John W. Linville" <linville@tuxdriver.com>
+Subject: [patch 31/49] iwlwifi: dont fail if scan is issued too early
+Content-Disposition: inline; filename=iwlwifi-don-t-fail-if-scan-is-issued-too-early.patch
+Content-Length: 2489
+Lines: 76
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Tomas Winkler <tomas.winkler@intel.com>
+
+commit 8d09a5e1c36d0dec5728e6c8b0bb5412de09b27b upstream
+
+This patch returns success and empty scan on scans requests that were
+rejected because issued too early. The cached bss list from previous
+scanning will be returned by mac80211.
+
+Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
+Signed-off-by: Zhu Yi <yi.zhu@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlwifi/iwl-agn.c  |   12 +++++++++---
+ drivers/net/wireless/iwlwifi/iwl-scan.c |    8 +-------
+ 2 files changed, 10 insertions(+), 10 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
+@@ -3213,20 +3213,26 @@ static int iwl4965_mac_hw_scan(struct ie
+               goto out_unlock;
+       }
+-      /* we don't schedule scan within next_scan_jiffies period */
++      /* We don't schedule scan within next_scan_jiffies period.
++       * Avoid scanning during possible EAPOL exchange, return
++       * success immediately.
++       */
+       if (priv->next_scan_jiffies &&
+           time_after(priv->next_scan_jiffies, jiffies)) {
+               IWL_DEBUG_SCAN("scan rejected: within next scan period\n");
+-              rc = -EAGAIN;
++              queue_work(priv->workqueue, &priv->scan_completed);
++              rc = 0;
+               goto out_unlock;
+       }
+       /* if we just finished scan ask for delay */
+       if (iwl_is_associated(priv) && priv->last_scan_jiffies &&
+           time_after(priv->last_scan_jiffies + IWL_DELAY_NEXT_SCAN, jiffies)) {
+               IWL_DEBUG_SCAN("scan rejected: within previous scan period\n");
+-              rc = -EAGAIN;
++              queue_work(priv->workqueue, &priv->scan_completed);
++              rc = 0;
+               goto out_unlock;
+       }
++
+       if (len) {
+               IWL_DEBUG_SCAN("direct scan for %s [%d]\n ",
+                              iwl_escape_essid(ssid, len), (int)len);
+--- a/drivers/net/wireless/iwlwifi/iwl-scan.c
++++ b/drivers/net/wireless/iwlwifi/iwl-scan.c
+@@ -464,11 +464,6 @@ void iwl_init_scan_params(struct iwl_pri
+ int iwl_scan_initiate(struct iwl_priv *priv)
+ {
+-      if (priv->iw_mode == IEEE80211_IF_TYPE_AP) {
+-              IWL_ERROR("APs don't scan.\n");
+-              return 0;
+-      }
+-
+       if (!iwl_is_ready_rf(priv)) {
+               IWL_DEBUG_SCAN("Aborting scan due to not ready.\n");
+               return -EIO;
+@@ -480,8 +475,7 @@ int iwl_scan_initiate(struct iwl_priv *p
+       }
+       if (test_bit(STATUS_SCAN_ABORTING, &priv->status)) {
+-              IWL_DEBUG_SCAN("Scan request while abort pending.  "
+-                             "Queuing.\n");
++              IWL_DEBUG_SCAN("Scan request while abort pending\n");
+               return -EAGAIN;
+       }
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:56 2008
+Message-Id: <20081112001556.495206887@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Tomas Winkler <tomas.winkler@intel.com>,
+ Zhu Yi <yi.zhu@intel.com>,
+ "John W. Linville" <linville@tuxdriver.com>
+Subject: [patch 32/49] iwlwifi: use correct DMA_MASK
+Content-Disposition: inline; filename=iwlwifi-use-correct-dma_mask.patch
+Content-Length: 1237
+Lines: 37
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Tomas Winkler <tomas.winkler@intel.com>
+
+commit 093d874c02e8d3091aa38596faf0ff2bfd4f0ceb upstream
+
+Use correct DMA_MASK: 4964 and 5000 support 36 bit addresses for
+pci express memory access.
+
+Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
+Signed-off-by: Zhu Yi <yi.zhu@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+
+---
+ drivers/net/wireless/iwlwifi/iwl-agn.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
+@@ -4225,13 +4225,13 @@ static int iwl4965_pci_probe(struct pci_
+       pci_set_master(pdev);
+-      err = pci_set_dma_mask(pdev, DMA_64BIT_MASK);
++      err = pci_set_dma_mask(pdev, DMA_BIT_MASK(36));
+       if (!err)
+-              err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK);
++              err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(36));
+       if (err) {
+-              err = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
++              err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
+               if (!err)
+-                      err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
++                      err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
+               /* both attempts failed: */
+               if (err) {
+                       printk(KERN_WARNING "%s: No suitable DMA available.\n",
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:56 2008
+Message-Id: <20081112001556.726719201@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Emmanuel Grumbach <emmanuel.grumbach@intel.com>,
+ Tomas Winkler <tomas.winkler@intel.com>,
+ "Rafael J. Wysocki" <rjw@sisk.pl>,
+ "John W. Linville" <linville@tuxdriver.com>
+Subject: [patch 33/49] iwlwifi: fix suspend to RAM in iwlwifi
+Content-Disposition: inline; filename=iwlwifi-fix-suspend-to-ram-in-iwlwifi.patch
+Content-Length: 1371
+Lines: 41
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Tomas Winkler <tomas.winkler@intel.com>
+
+commit 10d0bd56966571d0324dfd9bbb8aa913a60bef5f upstream
+
+This patch fixes suspend to RAM after by moving
+notify_mac out of iwlwifi mutex
+
+http://bugzilla.kernel.org/show_bug.cgi?id=11845
+
+Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
+Tested-by: Carlos R. Mafra <crmafra2@gmail.com>
+Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>
+Cc: Rafael J. Wysocki <rjw@sisk.pl>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlwifi/iwl-agn.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
+@@ -2090,7 +2090,6 @@ static void iwl_alive_start(struct iwl_p
+               iwl4965_error_recovery(priv);
+       iwl_power_update_mode(priv, 1);
+-      ieee80211_notify_mac(priv->hw, IEEE80211_NOTIFY_RE_ASSOC);
+       if (test_and_clear_bit(STATUS_MODE_PENDING, &priv->status))
+               iwl4965_set_mode(priv, priv->iw_mode);
+@@ -2342,6 +2341,7 @@ static void iwl_bg_alive_start(struct wo
+       mutex_lock(&priv->mutex);
+       iwl_alive_start(priv);
+       mutex_unlock(&priv->mutex);
++      ieee80211_notify_mac(priv->hw, IEEE80211_NOTIFY_RE_ASSOC);
+ }
+ static void iwl4965_bg_rf_kill(struct work_struct *work)
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:57 2008
+Message-Id: <20081112001556.891054053@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Tomas Winkler <tomas.winkler@intel.com>,
+ Emmanuel Grumbach <emmanuel.grumbach@intel.com>,
+ Zhu Yi <yi.zhu@intel.com>,
+ "John W. Linville" <linville@tuxdriver.com>
+Subject: [patch 34/49] iwlwifi: generic init calibrations framework
+Content-Disposition: inline; filename=iwlwifi-generic-init-calibrations-framework.patch
+Content-Length: 9374
+Lines: 313
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Tomas Winkler <tomas.winkler@intel.com>
+
+commit 6e21f2c109edd746a10e08186484bae8168cdd0c upstream
+
+This patch allows variable number of init calibrations and allows
+addition new HW.
+
+This patch also fixes critical bug. Only last calibration result
+was applied. On reception of one calibration result all the calibration
+was freed.
+
+Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
+Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Signed-off-by: Zhu Yi <yi.zhu@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlwifi/iwl-5000-hw.h |    7 +++
+ drivers/net/wireless/iwlwifi/iwl-5000.c    |   63 ++++-------------------------
+ drivers/net/wireless/iwlwifi/iwl-calib.c   |   60 +++++++++++++++++++++++++++
+ drivers/net/wireless/iwlwifi/iwl-core.c    |   19 --------
+ drivers/net/wireless/iwlwifi/iwl-core.h    |    8 +++
+ drivers/net/wireless/iwlwifi/iwl-dev.h     |   14 ++----
+ 6 files changed, 90 insertions(+), 81 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
++++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
+@@ -445,48 +445,6 @@ static int iwl5000_send_Xtal_calib(struc
+                               sizeof(cal_cmd), &cal_cmd);
+ }
+-static int iwl5000_send_calib_results(struct iwl_priv *priv)
+-{
+-      int ret = 0;
+-
+-      struct iwl_host_cmd hcmd = {
+-              .id = REPLY_PHY_CALIBRATION_CMD,
+-              .meta.flags = CMD_SIZE_HUGE,
+-      };
+-
+-      if (priv->calib_results.lo_res) {
+-              hcmd.len = priv->calib_results.lo_res_len;
+-              hcmd.data = priv->calib_results.lo_res;
+-              ret = iwl_send_cmd_sync(priv, &hcmd);
+-
+-              if (ret)
+-                      goto err;
+-      }
+-
+-      if (priv->calib_results.tx_iq_res) {
+-              hcmd.len = priv->calib_results.tx_iq_res_len;
+-              hcmd.data = priv->calib_results.tx_iq_res;
+-              ret = iwl_send_cmd_sync(priv, &hcmd);
+-
+-              if (ret)
+-                      goto err;
+-      }
+-
+-      if (priv->calib_results.tx_iq_perd_res) {
+-              hcmd.len = priv->calib_results.tx_iq_perd_res_len;
+-              hcmd.data = priv->calib_results.tx_iq_perd_res;
+-              ret = iwl_send_cmd_sync(priv, &hcmd);
+-
+-              if (ret)
+-                      goto err;
+-      }
+-
+-      return 0;
+-err:
+-      IWL_ERROR("Error %d\n", ret);
+-      return ret;
+-}
+-
+ static int iwl5000_send_calib_cfg(struct iwl_priv *priv)
+ {
+       struct iwl5000_calib_cfg_cmd calib_cfg_cmd;
+@@ -511,33 +469,30 @@ static void iwl5000_rx_calib_result(stru
+       struct iwl_rx_packet *pkt = (void *)rxb->skb->data;
+       struct iwl5000_calib_hdr *hdr = (struct iwl5000_calib_hdr *)pkt->u.raw;
+       int len = le32_to_cpu(pkt->len) & FH_RSCSR_FRAME_SIZE_MSK;
+-
+-      iwl_free_calib_results(priv);
++      int index;
+       /* reduce the size of the length field itself */
+       len -= 4;
++      /* Define the order in which the results will be sent to the runtime
++       * uCode. iwl_send_calib_results sends them in a row according to their
++       * index. We sort them here */
+       switch (hdr->op_code) {
+       case IWL5000_PHY_CALIBRATE_LO_CMD:
+-              priv->calib_results.lo_res = kzalloc(len, GFP_ATOMIC);
+-              priv->calib_results.lo_res_len = len;
+-              memcpy(priv->calib_results.lo_res, pkt->u.raw, len);
++              index = IWL5000_CALIB_LO;
+               break;
+       case IWL5000_PHY_CALIBRATE_TX_IQ_CMD:
+-              priv->calib_results.tx_iq_res = kzalloc(len, GFP_ATOMIC);
+-              priv->calib_results.tx_iq_res_len = len;
+-              memcpy(priv->calib_results.tx_iq_res, pkt->u.raw, len);
++              index = IWL5000_CALIB_TX_IQ;
+               break;
+       case IWL5000_PHY_CALIBRATE_TX_IQ_PERD_CMD:
+-              priv->calib_results.tx_iq_perd_res = kzalloc(len, GFP_ATOMIC);
+-              priv->calib_results.tx_iq_perd_res_len = len;
+-              memcpy(priv->calib_results.tx_iq_perd_res, pkt->u.raw, len);
++              index = IWL5000_CALIB_TX_IQ_PERD;
+               break;
+       default:
+               IWL_ERROR("Unknown calibration notification %d\n",
+                         hdr->op_code);
+               return;
+       }
++      iwl_calib_set(&priv->calib_results[index], pkt->u.raw, len);
+ }
+ static void iwl5000_rx_calib_complete(struct iwl_priv *priv,
+@@ -832,7 +787,7 @@ static int iwl5000_alive_notify(struct i
+       iwl5000_send_Xtal_calib(priv);
+       if (priv->ucode_type == UCODE_RT)
+-              iwl5000_send_calib_results(priv);
++              iwl_send_calib_results(priv);
+       return 0;
+ }
+--- a/drivers/net/wireless/iwlwifi/iwl-5000-hw.h
++++ b/drivers/net/wireless/iwlwifi/iwl-5000-hw.h
+@@ -129,6 +129,13 @@ struct iwl5000_shared {
+       __le32 padding2;
+ } __attribute__ ((packed));
++/* calibrations defined for 5000 */
++/* defines the order in which results should be sent to the runtime uCode */
++enum iwl5000_calib {
++      IWL5000_CALIB_LO,
++      IWL5000_CALIB_TX_IQ,
++      IWL5000_CALIB_TX_IQ_PERD,
++};
+ #endif /* __iwl_5000_hw_h__ */
+--- a/drivers/net/wireless/iwlwifi/iwl-calib.c
++++ b/drivers/net/wireless/iwlwifi/iwl-calib.c
+@@ -66,6 +66,66 @@
+ #include "iwl-core.h"
+ #include "iwl-calib.h"
++/*****************************************************************************
++ * INIT calibrations framework
++ *****************************************************************************/
++
++ int iwl_send_calib_results(struct iwl_priv *priv)
++{
++      int ret = 0;
++      int i = 0;
++
++      struct iwl_host_cmd hcmd = {
++              .id = REPLY_PHY_CALIBRATION_CMD,
++              .meta.flags = CMD_SIZE_HUGE,
++      };
++
++      for (i = 0; i < IWL_CALIB_MAX; i++)
++              if (priv->calib_results[i].buf) {
++                      hcmd.len = priv->calib_results[i].buf_len;
++                      hcmd.data = priv->calib_results[i].buf;
++                      ret = iwl_send_cmd_sync(priv, &hcmd);
++                      if (ret)
++                              goto err;
++              }
++
++      return 0;
++err:
++      IWL_ERROR("Error %d iteration %d\n", ret, i);
++      return ret;
++}
++EXPORT_SYMBOL(iwl_send_calib_results);
++
++int iwl_calib_set(struct iwl_calib_result *res, const u8 *buf, int len)
++{
++      if (res->buf_len != len) {
++              kfree(res->buf);
++              res->buf = kzalloc(len, GFP_ATOMIC);
++      }
++      if (unlikely(res->buf == NULL))
++              return -ENOMEM;
++
++      res->buf_len = len;
++      memcpy(res->buf, buf, len);
++      return 0;
++}
++EXPORT_SYMBOL(iwl_calib_set);
++
++void iwl_calib_free_results(struct iwl_priv *priv)
++{
++      int i;
++
++      for (i = 0; i < IWL_CALIB_MAX; i++) {
++              kfree(priv->calib_results[i].buf);
++              priv->calib_results[i].buf = NULL;
++              priv->calib_results[i].buf_len = 0;
++      }
++}
++
++/*****************************************************************************
++ * RUNTIME calibrations framework
++ *****************************************************************************/
++
+ /* "false alarms" are signals that our DSP tries to lock onto,
+  *   but then determines that they are either noise, or transmissions
+  *   from a distant wireless network (also "noise", really) that get
+--- a/drivers/net/wireless/iwlwifi/iwl-core.c
++++ b/drivers/net/wireless/iwlwifi/iwl-core.c
+@@ -956,22 +956,6 @@ err:
+ }
+ EXPORT_SYMBOL(iwl_init_drv);
+-void iwl_free_calib_results(struct iwl_priv *priv)
+-{
+-      kfree(priv->calib_results.lo_res);
+-      priv->calib_results.lo_res = NULL;
+-      priv->calib_results.lo_res_len = 0;
+-
+-      kfree(priv->calib_results.tx_iq_res);
+-      priv->calib_results.tx_iq_res = NULL;
+-      priv->calib_results.tx_iq_res_len = 0;
+-
+-      kfree(priv->calib_results.tx_iq_perd_res);
+-      priv->calib_results.tx_iq_perd_res = NULL;
+-      priv->calib_results.tx_iq_perd_res_len = 0;
+-}
+-EXPORT_SYMBOL(iwl_free_calib_results);
+-
+ int iwl_set_tx_power(struct iwl_priv *priv, s8 tx_power, bool force)
+ {
+       int ret = 0;
+@@ -999,10 +983,9 @@ int iwl_set_tx_power(struct iwl_priv *pr
+ }
+ EXPORT_SYMBOL(iwl_set_tx_power);
+-
+ void iwl_uninit_drv(struct iwl_priv *priv)
+ {
+-      iwl_free_calib_results(priv);
++      iwl_calib_free_results(priv);
+       iwlcore_free_geos(priv);
+       iwl_free_channel_map(priv);
+       kfree(priv->scan);
+--- a/drivers/net/wireless/iwlwifi/iwl-core.h
++++ b/drivers/net/wireless/iwlwifi/iwl-core.h
+@@ -186,7 +186,6 @@ struct ieee80211_hw *iwl_alloc_all(struc
+ void iwl_hw_detect(struct iwl_priv *priv);
+ void iwl_clear_stations_table(struct iwl_priv *priv);
+-void iwl_free_calib_results(struct iwl_priv *priv);
+ void iwl_reset_qos(struct iwl_priv *priv);
+ void iwl_set_rxon_chain(struct iwl_priv *priv);
+ int iwl_set_rxon_channel(struct iwl_priv *priv,
+@@ -291,6 +290,13 @@ int iwl_scan_initiate(struct iwl_priv *p
+ void iwl_setup_rx_scan_handlers(struct iwl_priv *priv);
+ void iwl_setup_scan_deferred_work(struct iwl_priv *priv);
++/*******************************************************************************
++ * Calibrations - implemented in iwl-calib.c
++ ******************************************************************************/
++int iwl_send_calib_results(struct iwl_priv *priv);
++int iwl_calib_set(struct iwl_calib_result *res, const u8 *buf, int len);
++void iwl_calib_free_results(struct iwl_priv *priv);
++
+ /*****************************************************
+  *   S e n d i n g     H o s t     C o m m a n d s   *
+  *****************************************************/
+--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
++++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
+@@ -745,13 +745,10 @@ struct statistics_general_data {
+       u32 beacon_energy_c;
+ };
+-struct iwl_calib_results {
+-      void *tx_iq_res;
+-      void *tx_iq_perd_res;
+-      void *lo_res;
+-      u32 tx_iq_res_len;
+-      u32 tx_iq_perd_res_len;
+-      u32 lo_res_len;
++/* Opaque calibration results */
++struct iwl_calib_result {
++      void *buf;
++      size_t buf_len;
+ };
+ enum ucode_type {
+@@ -813,6 +810,7 @@ enum {
+ #define IWL_MAX_NUM_QUEUES    20 /* FIXME: do dynamic allocation */
++#define IWL_CALIB_MAX  3
+ struct iwl_priv {
+@@ -857,7 +855,7 @@ struct iwl_priv {
+       s32 last_temperature;
+       /* init calibration results */
+-      struct iwl_calib_results calib_results;
++      struct iwl_calib_result calib_results[IWL_CALIB_MAX];
+       /* Scan related variables */
+       unsigned long last_scan_jiffies;
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:57 2008
+Message-Id: <20081112001557.075455073@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ "John W. Linville" <linville@tuxdriver.com>
+Subject: [patch 35/49] zd1211rw: Add 2 device IDs
+Content-Disposition: inline; filename=zd1211rw-add-2-device-ids.patch
+Content-Length: 1505
+Lines: 38
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Daniel Drake <dsd@gentoo.org>
+
+commit 0feec9dfe7b8880ab3b4c38d7cc4107dd706ea7f upstream.
+
+07fa/1196
+Bewan BWIFI-USB54AR: Tested by night1308, this device is a ZD1211B with
+an AL2230S radio.
+
+0ace/b215
+HP 802.11abg: Tested by Robert Philippe
+
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/zd1211rw/zd_usb.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/net/wireless/zd1211rw/zd_usb.c
++++ b/drivers/net/wireless/zd1211rw/zd_usb.c
+@@ -61,6 +61,7 @@ static struct usb_device_id usb_ids[] = 
+       { USB_DEVICE(0x0105, 0x145f), .driver_info = DEVICE_ZD1211 },
+       /* ZD1211B */
+       { USB_DEVICE(0x0ace, 0x1215), .driver_info = DEVICE_ZD1211B },
++      { USB_DEVICE(0x0ace, 0xb215), .driver_info = DEVICE_ZD1211B },
+       { USB_DEVICE(0x157e, 0x300d), .driver_info = DEVICE_ZD1211B },
+       { USB_DEVICE(0x079b, 0x0062), .driver_info = DEVICE_ZD1211B },
+       { USB_DEVICE(0x1582, 0x6003), .driver_info = DEVICE_ZD1211B },
+@@ -82,6 +83,7 @@ static struct usb_device_id usb_ids[] = 
+       { USB_DEVICE(0x0cde, 0x001a), .driver_info = DEVICE_ZD1211B },
+       { USB_DEVICE(0x0586, 0x340a), .driver_info = DEVICE_ZD1211B },
+       { USB_DEVICE(0x0471, 0x1237), .driver_info = DEVICE_ZD1211B },
++      { USB_DEVICE(0x07fa, 0x1196), .driver_info = DEVICE_ZD1211B },
+       /* "Driverless" devices that need ejecting */
+       { USB_DEVICE(0x0ace, 0x2011), .driver_info = DEVICE_INSTALLER },
+       { USB_DEVICE(0x0ace, 0x20ff), .driver_info = DEVICE_INSTALLER },
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:57 2008
+Message-Id: <20081112001557.260637268@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Zhu Yi <yi.zhu@intel.com>,
+ Tomas Winkler <tomas.winkler@intel.com>,
+ Reinette Chatre <reinette.chatre@intel.com>,
+ "John W. Linville" <linville@tuxdriver.com>
+Subject: [patch 36/49] iwl3945: fix deadlock on suspend
+Content-Disposition: inline; filename=iwl3945-fix-deadlock-on-suspend.patch
+Content-Length: 1203
+Lines: 37
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Zhu Yi <yi.zhu@intel.com>
+
+commit d54bc4e3fc5c56600a13c9ebc0a7e1077ac05d59 upstream.
+
+This patch fixes iwl3945 deadlock during suspend by moving notify_mac out
+of iwl3945 mutex. This is a portion of the same fix for iwlwifi by Tomas.
+
+Signed-off-by: Zhu Yi <yi.zhu@intel.com>
+Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
+Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlwifi/iwl3945-base.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
++++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
+@@ -5761,7 +5761,6 @@ static void iwl3945_alive_start(struct i
+       if (priv->error_recovering)
+               iwl3945_error_recovery(priv);
+-      ieee80211_notify_mac(priv->hw, IEEE80211_NOTIFY_RE_ASSOC);
+       return;
+  restart:
+@@ -6006,6 +6005,7 @@ static void iwl3945_bg_alive_start(struc
+       mutex_lock(&priv->mutex);
+       iwl3945_alive_start(priv);
+       mutex_unlock(&priv->mutex);
++      ieee80211_notify_mac(priv->hw, IEEE80211_NOTIFY_RE_ASSOC);
+ }
+ static void iwl3945_bg_rf_kill(struct work_struct *work)
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:57 2008
+Message-Id: <20081112001557.419726901@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Reinette Chatre <reinette.chatre@intel.com>,
+ "John W. Linville" <linville@tuxdriver.com>
+Subject: [patch 37/49] iwl3945: do not send scan command if channel count zero
+Content-Disposition: inline; filename=iwl3945-do-not-send-scan-command-if-channel-count-zero.patch
+Content-Length: 1133
+Lines: 35
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Reinette Chatre <reinette.chatre@intel.com>
+
+commit 14b5433606289dbc5b6fd70ced11462f80e95003 upstream.
+
+Do not send scan command if no channels to scan.
+
+This avoids a Microcode error as reported in:
+http://www.intellinuxwireless.org/bugzilla/show_bug.cgi?id=1650
+http://bugzilla.kernel.org/show_bug.cgi?id=11806
+http://marc.info/?l=linux-wireless&m=122437145211886&w=2
+
+Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlwifi/iwl3945-base.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
++++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
+@@ -6259,6 +6259,11 @@ static void iwl3945_bg_request_scan(stru
+                               direct_mask,
+                               (void *)&scan->data[le16_to_cpu(scan->tx_cmd.len)]);
++      if (scan->channel_count == 0) {
++              IWL_DEBUG_SCAN("channel count %d\n", scan->channel_count);
++              goto done;
++      }
++
+       cmd.len += le16_to_cpu(scan->tx_cmd.len) +
+           scan->channel_count * sizeof(struct iwl3945_scan_channel);
+       cmd.data = scan;
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:57 2008
+Message-Id: <20081112001557.625483150@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Andrey Borzenkov <arvidjaar@mail.ru>,
+ Jens Axboe <jens.axboe@oracle.com>
+Subject: [patch 38/49] cpqarry: fix return value of cpqarray_init()
+Content-Disposition: inline; filename=cpqarry-fix-return-value-of-cpqarray_init.patch
+Content-Length: 1600
+Lines: 48
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Andrey Borzenkov <arvidjaar@mail.ru>
+
+commit 2197d18ded232ef6eef63cce57b6b21eddf1b7b6 upstream.
+
+As reported by Dick Gevers on Compaq ProLiant:
+
+Oct 13 18:06:51 dvgcpl kernel: Compaq SMART2 Driver (v 2.6.0)
+Oct 13 18:06:51 dvgcpl kernel: sys_init_module: 'cpqarray'->init
+suspiciously returned 1, it should follow 0/-E convention
+Oct 13 18:06:51 dvgcpl kernel: sys_init_module: loading module anyway...
+Oct 13 18:06:51 dvgcpl kernel: Pid: 315, comm: modprobe Not tainted
+2.6.27-desktop-0.rc8.2mnb #1
+Oct 13 18:06:51 dvgcpl kernel:  [<c0380612>] ? printk+0x18/0x1e
+Oct 13 18:06:51 dvgcpl kernel:  [<c0158f85>] sys_init_module+0x155/0x1c0
+Oct 13 18:06:51 dvgcpl kernel:  [<c0103f06>] syscall_call+0x7/0xb
+Oct 13 18:06:51 dvgcpl kernel:  =======================
+
+Make it return 0 on success and -ENODEV if no array was found.
+
+Reported-by: Dick Gevers <dvgevers@xs4all.nl>
+Signed-off-by: Andrey Borzenkov <arvidjaar@mail.ru>
+Cc: Jens Axboe <jens.axboe@oracle.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/block/cpqarray.c |    7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+--- a/drivers/block/cpqarray.c
++++ b/drivers/block/cpqarray.c
+@@ -567,7 +567,12 @@ static int __init cpqarray_init(void)
+                       num_cntlrs_reg++;
+       }
+-      return(num_cntlrs_reg);
++      if (num_cntlrs_reg)
++              return 0;
++      else {
++              pci_unregister_driver(&cpqarray_pci_driver);
++              return -ENODEV;
++      }
+ }
+ /* Function to find the first free pointer into our hba[] array */
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:57 2008
+Message-Id: <20081112001557.786037914@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Shaohua Li <shaohua.li@intel.com>,
+ Len Brown <len.brown@intel.com>
+Subject: [patch 39/49] ACPI: dock: avoid check _STA method
+Content-Disposition: inline; filename=acpi-dock-avoid-check-_sta-method.patch
+Content-Length: 1255
+Lines: 42
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Shaohua Li <shaohua.li@intel.com>
+
+commit 8b59560a3baf2e7c24e0fb92ea5d09eca92805db upstream.
+
+In some BIOSes, every _STA method call will send a notification again,
+this cause freeze. And in some BIOSes, it appears _STA should be called
+after _DCK. This tries to avoid calls _STA, and still keep the device
+present check.
+
+http://bugzilla.kernel.org/show_bug.cgi?id=10431
+
+Signed-off-by: Shaohua Li <shaohua.li@intel.com>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/acpi/dock.c |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/drivers/acpi/dock.c
++++ b/drivers/acpi/dock.c
+@@ -604,14 +604,17 @@ static int handle_eject_request(struct d
+ static void dock_notify(acpi_handle handle, u32 event, void *data)
+ {
+       struct dock_station *ds = data;
++      struct acpi_device *tmp;
+       switch (event) {
+       case ACPI_NOTIFY_BUS_CHECK:
+-              if (!dock_in_progress(ds) && dock_present(ds)) {
++              if (!dock_in_progress(ds) && acpi_bus_get_device(ds->handle,
++                 &tmp)) {
+                       begin_dock(ds);
+                       dock(ds);
+                       if (!dock_present(ds)) {
+                               printk(KERN_ERR PREFIX "Unable to dock!\n");
++                              complete_dock(ds);
+                               break;
+                       }
+                       atomic_notifier_call_chain(&dock_notifier_list,
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:58 2008
+Message-Id: <20081112001558.011849435@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Dmitry Baryshkov <dbaryshkov@gmail.com>,
+ Russell King <rmk+kernel@arm.linux.org.uk>,
+ Pavel Machek <pavel@suse.cz>
+Subject: [patch 40/49] ARM: 5300/1: fixup spitz reset during boot
+Content-Disposition: inline; filename=arm-5300-1-fixup-spitz-reset-during-boot.patch
+Content-Length: 2647
+Lines: 91
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Dmitry Baryshkov <dbaryshkov@gmail.com>
+
+commit 69fc7eed5f56bce15b239e5110de2575a6970df4 upstream
+
+Some machines don't have the pullup/down on their reset
+pin, so configuring the reset generating pin as input makes
+them reset immediately. Fix that by making reset pin direction
+configurable.
+
+This fixes the boot problem on Sharp Zaurus c3000
+
+Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com>
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+Signed-off-by: Pavel Machek <pavel@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/arm/mach-pxa/include/mach/reset.h |    9 ++++++---
+ arch/arm/mach-pxa/reset.c              |    9 ++++++---
+ arch/arm/mach-pxa/spitz.c              |    2 +-
+ arch/arm/mach-pxa/tosa.c               |    2 +-
+ 4 files changed, 14 insertions(+), 8 deletions(-)
+
+--- a/arch/arm/mach-pxa/include/mach/reset.h
++++ b/arch/arm/mach-pxa/include/mach/reset.h
+@@ -10,9 +10,12 @@
+ extern unsigned int reset_status;
+ extern void clear_reset_status(unsigned int mask);
+-/*
+- * register GPIO as reset generator
++/**
++ * init_gpio_reset() - register GPIO as reset generator
++ *
++ * @gpio - gpio nr
++ * @output - set gpio as out/low instead of input during normal work
+  */
+-extern int init_gpio_reset(int gpio);
++extern int init_gpio_reset(int gpio, int output);
+ #endif /* __ASM_ARCH_RESET_H */
+--- a/arch/arm/mach-pxa/reset.c
++++ b/arch/arm/mach-pxa/reset.c
+@@ -20,7 +20,7 @@ static void do_hw_reset(void);
+ static int reset_gpio = -1;
+-int init_gpio_reset(int gpio)
++int init_gpio_reset(int gpio, int output)
+ {
+       int rc;
+@@ -30,9 +30,12 @@ int init_gpio_reset(int gpio)
+               goto out;
+       }
+-      rc = gpio_direction_input(gpio);
++      if (output)
++              rc = gpio_direction_output(gpio, 0);
++      else
++              rc = gpio_direction_input(gpio);
+       if (rc) {
+-              printk(KERN_ERR "Can't configure reset_gpio for input\n");
++              printk(KERN_ERR "Can't configure reset_gpio\n");
+               gpio_free(gpio);
+               goto out;
+       }
+--- a/arch/arm/mach-pxa/spitz.c
++++ b/arch/arm/mach-pxa/spitz.c
+@@ -548,7 +548,7 @@ static void spitz_restart(char mode)
+ static void __init common_init(void)
+ {
+-      init_gpio_reset(SPITZ_GPIO_ON_RESET);
++      init_gpio_reset(SPITZ_GPIO_ON_RESET, 1);
+       pm_power_off = spitz_poweroff;
+       arm_pm_restart = spitz_restart;
+--- a/arch/arm/mach-pxa/tosa.c
++++ b/arch/arm/mach-pxa/tosa.c
+@@ -781,7 +781,7 @@ static void __init tosa_init(void)
+       gpio_set_wake(MFP_PIN_GPIO1, 1);
+       /* We can't pass to gpio-keys since it will drop the Reset altfunc */
+-      init_gpio_reset(TOSA_GPIO_ON_RESET);
++      init_gpio_reset(TOSA_GPIO_ON_RESET, 0);
+       pm_power_off = tosa_poweroff;
+       arm_pm_restart = tosa_restart;
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:58 2008
+Message-Id: <20081112001558.228152973@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14:42 -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 Howells <dhowells@redhat.com>
+Subject: [patch 41/49] KEYS: Make request key instantiate the per-user keyrings
+Content-Disposition: inline; filename=keys-make-request-key-instantiate-the-per-user-keyrings.patch
+Content-Length: 1864
+Lines: 56
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: David Howells <dhowells@redhat.com>
+
+commit 1f8f5cf6e4f038552a3e47b66085452c08556d71 upstream
+
+Make request_key() instantiate the per-user keyrings so that it doesn't oops
+if it needs to get hold of the user session keyring because there isn't a
+session keyring in place.
+
+Signed-off-by: David Howells <dhowells@redhat.com>
+Tested-by: Steve French <smfrench@gmail.com>
+Tested-by: Rutger Nijlunsing <rutger.nijlunsing@gmail.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ security/keys/internal.h     |    1 +
+ security/keys/process_keys.c |    2 +-
+ security/keys/request_key.c  |    4 ++++
+ 3 files changed, 6 insertions(+), 1 deletion(-)
+
+--- a/security/keys/internal.h
++++ b/security/keys/internal.h
+@@ -107,6 +107,7 @@ extern key_ref_t search_process_keyrings
+ extern struct key *find_keyring_by_name(const char *name, bool skip_perm_check);
++extern int install_user_keyrings(struct task_struct *tsk);
+ extern int install_thread_keyring(struct task_struct *tsk);
+ extern int install_process_keyring(struct task_struct *tsk);
+--- a/security/keys/process_keys.c
++++ b/security/keys/process_keys.c
+@@ -40,7 +40,7 @@ struct key_user root_key_user = {
+ /*
+  * install user and user session keyrings for a particular UID
+  */
+-static int install_user_keyrings(struct task_struct *tsk)
++int install_user_keyrings(struct task_struct *tsk)
+ {
+       struct user_struct *user = tsk->user;
+       struct key *uid_keyring, *session_keyring;
+--- a/security/keys/request_key.c
++++ b/security/keys/request_key.c
+@@ -74,6 +74,10 @@ static int call_sbin_request_key(struct 
+       kenter("{%d},{%d},%s", key->serial, authkey->serial, op);
++      ret = install_user_keyrings(tsk);
++      if (ret < 0)
++              goto error_alloc;
++
+       /* allocate a new session keyring */
+       sprintf(desc, "_req.%u", key->serial);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:58 2008
+Message-Id: <20081112001558.418868622@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14:43 -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>,
+ Shane Huang <Shane.Huang@amd.com>,
+ Jeff Garzik <jgarzik@redhat.com>
+Subject: [patch 42/49] libata: fix last_reset timestamp handling
+Content-Disposition: inline; filename=libata-fix-last_reset-timestamp-handling.patch
+Content-Length: 2991
+Lines: 92
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Tejun Heo <tj@kernel.org>
+
+commit 19b723218bde79c60a394a3caee9eb156ac2d356 upstream
+
+ehc->last_reset is used to ensure that resets are not issued too
+close to each other.  It's initialized to jiffies minus one minute
+on EH entry.  However, when new links are initialized after PMP is
+probed, new links have zero for this timestamp resulting in long wait
+depending on the current jiffies.
+
+This patch makes last_set considered iff ATA_EHI_DID_RESET is set, in
+which case last_reset is always initialized.  As an added precaution,
+WARN_ON() is added so that warning is printed if last_reset is
+in future.
+
+This problem is spotted and debugged by Shane Huang.
+
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Cc: Shane Huang <Shane.Huang@amd.com>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ata/libata-eh.c |   21 +++++++++++----------
+ 1 file changed, 11 insertions(+), 10 deletions(-)
+
+--- a/drivers/ata/libata-eh.c
++++ b/drivers/ata/libata-eh.c
+@@ -604,9 +604,6 @@ void ata_scsi_error(struct Scsi_Host *ho
+                               if (ata_ncq_enabled(dev))
+                                       ehc->saved_ncq_enabled |= 1 << devno;
+                       }
+-
+-                      /* set last reset timestamp to some time in the past */
+-                      ehc->last_reset = jiffies - 60 * HZ;
+               }
+               ap->pflags |= ATA_PFLAG_EH_IN_PROGRESS;
+@@ -2209,17 +2206,21 @@ int ata_eh_reset(struct ata_link *link, 
+       if (link->flags & ATA_LFLAG_NO_SRST)
+               softreset = NULL;
+-      now = jiffies;
+-      deadline = ata_deadline(ehc->last_reset, ATA_EH_RESET_COOL_DOWN);
+-      if (time_before(now, deadline))
+-              schedule_timeout_uninterruptible(deadline - now);
++      /* make sure each reset attemp is at least COOL_DOWN apart */
++      if (ehc->i.flags & ATA_EHI_DID_RESET) {
++              now = jiffies;
++              WARN_ON(time_after(ehc->last_reset, now));
++              deadline = ata_deadline(ehc->last_reset,
++                                      ATA_EH_RESET_COOL_DOWN);
++              if (time_before(now, deadline))
++                      schedule_timeout_uninterruptible(deadline - now);
++      }
+       spin_lock_irqsave(ap->lock, flags);
+       ap->pflags |= ATA_PFLAG_RESETTING;
+       spin_unlock_irqrestore(ap->lock, flags);
+       ata_eh_about_to_do(link, NULL, ATA_EH_RESET);
+-      ehc->last_reset = jiffies;
+       ata_link_for_each_dev(dev, link) {
+               /* If we issue an SRST then an ATA drive (not ATAPI)
+@@ -2285,7 +2286,6 @@ int ata_eh_reset(struct ata_link *link, 
+       /*
+        * Perform reset
+        */
+-      ehc->last_reset = jiffies;
+       if (ata_is_host_link(link))
+               ata_eh_freeze_port(ap);
+@@ -2297,6 +2297,7 @@ int ata_eh_reset(struct ata_link *link, 
+                                       reset == softreset ? "soft" : "hard");
+               /* mark that this EH session started with reset */
++              ehc->last_reset = jiffies;
+               if (reset == hardreset)
+                       ehc->i.flags |= ATA_EHI_DID_HARDRESET;
+               else
+@@ -2404,7 +2405,7 @@ int ata_eh_reset(struct ata_link *link, 
+       /* reset successful, schedule revalidation */
+       ata_eh_done(link, NULL, ATA_EH_RESET);
+-      ehc->last_reset = jiffies;
++      ehc->last_reset = jiffies;      /* update to completion time */
+       ehc->i.action |= ATA_EH_REVALIDATE;
+       rc = 0;
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:58 2008
+Message-Id: <20081112001558.597878733@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14:44 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Greg KH <greg@kroah.com>
+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,
+ Matthew Ranostay <mranostay@embeddedalley.com>,
+ Takashi Iwai <tiwai@suse.de>
+Subject: [patch 43/49] ALSA: hda: make a STAC_DELL_EQ option
+Content-Disposition: inline; filename=alsa-hda-make-a-stac_dell_eq-option.patch
+Content-Length: 2187
+Lines: 76
+
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Matthew Ranostay <mranostay@embeddedalley.com>
+
+commit 6b3ab21ef1ac15db4b053ce0ba8eae0ef9361c8a upstream.
+
+Add support for explicitly enabling the EQ distortion hack for
+systems without software biquad support.
+
+Signed-off-by: Matthew Ranostay <mranostay@embeddedalley.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/pci/hda/patch_sigmatel.c |   15 +++++++++------
+ 1 file changed, 9 insertions(+), 6 deletions(-)
+
+--- a/sound/pci/hda/patch_sigmatel.c
++++ b/sound/pci/hda/patch_sigmatel.c
+@@ -67,6 +67,7 @@ enum {
+ enum {
+       STAC_92HD73XX_REF,
+       STAC_DELL_M6,
++      STAC_DELL_EQ,
+       STAC_92HD73XX_MODELS
+ };
+@@ -560,9 +561,7 @@ static struct hda_verb dell_eq_core_init
+ };
+ static struct hda_verb dell_m6_core_init[] = {
+-      /* set master volume to max value without distortion
+-       * and direct control */
+-      { 0x1f, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xec},
++      { 0x1f, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff},
+       /* setup audio connections */
+       { 0x0d, AC_VERB_SET_CONNECT_SEL, 0x00},
+       { 0x0a, AC_VERB_SET_CONNECT_SEL, 0x01},
+@@ -1297,11 +1296,13 @@ static unsigned int dell_m6_pin_configs[
+ static unsigned int *stac92hd73xx_brd_tbl[STAC_92HD73XX_MODELS] = {
+       [STAC_92HD73XX_REF]     = ref92hd73xx_pin_configs,
+       [STAC_DELL_M6]  = dell_m6_pin_configs,
++      [STAC_DELL_EQ]  = dell_m6_pin_configs,
+ };
+ static const char *stac92hd73xx_models[STAC_92HD73XX_MODELS] = {
+       [STAC_92HD73XX_REF] = "ref",
+       [STAC_DELL_M6] = "dell-m6",
++      [STAC_DELL_EQ] = "dell-eq",
+ };
+ static struct snd_pci_quirk stac92hd73xx_cfg_tbl[] = {
+@@ -3560,8 +3561,12 @@ again:
+       spec->gpio_data = 0x01;
+       switch (spec->board_config) {
+-      case STAC_DELL_M6:
++      case STAC_DELL_EQ:
+               spec->init = dell_eq_core_init;
++              /* fallthru */
++      case STAC_DELL_M6:
++              if (!spec->init)
++                      spec->init = dell_m6_core_init;
+               switch (codec->subsystem_id) {
+               case 0x1028025e: /* Analog Mics */
+               case 0x1028025f:
+@@ -3570,8 +3575,6 @@ again:
+                       break;
+               case 0x10280271: /* Digital Mics */
+               case 0x10280272:
+-                      spec->init = dell_m6_core_init;
+-                      /* fall-through */
+               case 0x10280254:
+               case 0x10280255:
+                       stac92xx_set_config_reg(codec, 0x13, 0x90A60160);
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:58 2008
+Message-Id: <20081112001558.813857440@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ "Rafael J. Wysocki" <rjw@sisk.pl>,
+ Pavel Machek <pavel@suse.cz>
+Subject: [patch 44/49] Fix __pfn_to_page(pfn) for CONFIG_DISCONTIGMEM=y
+Content-Disposition: inline; filename=fix-__pfn_to_page-for-config_discontigmem-y.patch
+Content-Length: 1257
+Lines: 36
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Rafael J. Wysocki <rjw@sisk.pl>
+
+commit c5d712433ff57a66d8fb79a57a4fc7a7c3467b97 upstream
+
+Fix the __pfn_to_page(pfn) macro so that it doesn't evaluate its
+argument twice in the CONFIG_DISCONTIGMEM=y case, because 'pfn' may
+be a result of a funtion call having side effects.
+
+For example, the hibernation code applies pfn_to_page(pfn) to the
+result of a function returning the pfn corresponding to the next set
+bit in a bitmap and the current bit position is modified on each
+call.  This leads to "interesting" failures for CONFIG_DISCONTIGMEM=y
+due to the current behavior of __pfn_to_page(pfn).
+
+Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
+Acked-by: Pavel Machek <pavel@suse.cz>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/asm-generic/memory_model.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/include/asm-generic/memory_model.h
++++ b/include/asm-generic/memory_model.h
+@@ -34,7 +34,7 @@
+ #define __pfn_to_page(pfn)                    \
+ ({    unsigned long __pfn = (pfn);            \
+-      unsigned long __nid = arch_pfn_to_nid(pfn);  \
++      unsigned long __nid = arch_pfn_to_nid(__pfn);  \
+       NODE_DATA(__nid)->node_mem_map + arch_local_page_offset(__pfn, __nid);\
+ })
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:59 2008
+Message-Id: <20081112001559.015928933@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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,
+ Pierre Ossman <drzeus@drzeus.cx>
+Subject: [patch 45/49] mmc: increase SD write timeout for crappy cards
+Content-Disposition: inline; filename=mmc-increase-sd-write-timeout-for-crappy-cards.patch
+Content-Length: 926
+Lines: 35
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Pierre Ossman <drzeus@drzeus.cx>
+
+commit 493890e75d98810a3470b4aae23be628ee5e9667 upstream.
+
+It seems that some cards are slightly out of spec and occasionally
+will not be able to complete a write in the alloted 250 ms [1].
+Incease the timeout slightly to allow even these cards to function
+properly.
+
+[1] http://lkml.org/lkml/2008/9/23/390
+
+Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/mmc/core/core.c |    6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+--- a/drivers/mmc/core/core.c
++++ b/drivers/mmc/core/core.c
+@@ -280,7 +280,11 @@ void mmc_set_data_timeout(struct mmc_dat
+                       (card->host->ios.clock / 1000);
+               if (data->flags & MMC_DATA_WRITE)
+-                      limit_us = 250000;
++                      /*
++                       * The limit is really 250 ms, but that is
++                       * insufficient for some crappy cards.
++                       */
++                      limit_us = 300000;
+               else
+                       limit_us = 100000;
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:59 2008
+Message-Id: <20081112001559.213801288@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14:47 -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 46/49] hfsplus: fix Buffer overflow with a corrupted image (CVE-2008-4933)
+Content-Disposition: inline; filename=hfsplus-fix-buffer-overflow-with-a-corrupted-image.patch
+Content-Length: 6267
+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 11 16:15:59 2008
+Message-Id: <20081112001559.404539218@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14:48 -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 47/49] hfsplus: check read_mapping_page() return value (CVE-2008-4934)
+Content-Disposition: inline; filename=hfsplus-check-read_mapping_page-return-value.patch
+Content-Length: 4650
+Lines: 105
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Eric Sesterhenn <snakebyte@gmx.de>
+
+commit 649f1ee6c705aab644035a7998d7b574193a598a upstream.
+
+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 11 16:15:59 2008
+Message-Id: <20081112001559.611949866@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14:49 -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,
+ Roman Zippel <zippel@linux-m68k.org>,
+ Eric Sesterhenn <snakebyte@gmx.de>
+Subject: [patch 48/49] hfs: fix namelength memory corruption (CVE-2008-5025)
+Content-Disposition: inline; filename=hfs-fix-namelength-memory-corruption.patch
+Content-Length: 1134
+Lines: 34
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Eric Sesterhenn <snakebyte@gmx.de>
+
+commit d38b7aa7fc3371b52d036748028db50b585ade2e upstream
+
+Fix a stack corruption caused by a corrupted hfs filesystem.  If the
+catalog name length is corrupted the memcpy overwrites the catalog btree
+structure.  Since the field is limited to HFS_NAMELEN bytes in the
+structure and the file format, we throw an error if it is too long.
+
+Cc: Roman Zippel <zippel@linux-m68k.org>
+Signed-off-by: Eric Sesterhenn <snakebyte@gmx.de>
+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/hfs/catalog.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/fs/hfs/catalog.c
++++ b/fs/hfs/catalog.c
+@@ -190,6 +190,10 @@ int hfs_cat_find_brec(struct super_block
+       fd->search_key->cat.ParID = rec.thread.ParID;
+       len = fd->search_key->cat.CName.len = rec.thread.CName.len;
++      if (len > HFS_NAMELEN) {
++              printk(KERN_ERR "hfs: bad catalog namelength\n");
++              return -EIO;
++      }
+       memcpy(fd->search_key->cat.CName.name, rec.thread.CName.name, len);
+       return hfs_brec_find(fd);
+ }
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:59 2008
+Message-Id: <20081112001559.797434194@mini.kroah.org>
+References: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14:50 -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,
+ Paul Stoffregen <paul@pjrc.com>,
+ Jiri Kosina <jkosina@suse.cz>
+Subject: [patch 49/49] HID: fix incorrent length condition in hidraw_write()
+Content-Disposition: inline; filename=hid-fix-incorrent-length-condition-in-hidraw_write.patch
+Content-Length: 921
+Lines: 38
+
+2.6.27-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+
+From: Jiri Kosina <jkosina@suse.cz>
+
+upstream commit 2b107d629dc0c35de606bb7b010b829cd247a93a
+
+From: Jiri Kosina <jkosina@suse.cz>
+
+The bound check on the buffer length
+
+       if (count > HID_MIN_BUFFER_SIZE)
+
+is of course incorrent, the proper check is
+
+       if (count > HID_MAX_BUFFER_SIZE)
+
+Fix it.
+
+Reported-by: Jerry Ryle <jerry@mindtribe.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Cc: Paul Stoffregen <paul@pjrc.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/hid/hidraw.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/hid/hidraw.c
++++ b/drivers/hid/hidraw.c
+@@ -113,7 +113,7 @@ static ssize_t hidraw_write(struct file 
+       if (!dev->hid_output_raw_report)
+               return -ENODEV;
+-      if (count > HID_MIN_BUFFER_SIZE) {
++      if (count > HID_MAX_BUFFER_SIZE) {
+               printk(KERN_WARNING "hidraw: pid %d passed too large report\n",
+                               task_pid_nr(current));
+               return -EINVAL;
+
+-- 
+
+From gregkh@mini.kroah.org Tue Nov 11 16:15:50 2008
+Message-Id: <20081112001401.926965113@mini.kroah.org>
+User-Agent: quilt/0.46-1
+Date: Tue, 11 Nov 2008 16:14: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
+Subject: [patch 00/49] 2.6.27.5 stable review
+Content-Length: 4040
+Lines: 80
+
+This is the start of the stable review cycle for the 2.6.27.5 release.
+There are 49 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 Friday, November 14, 00:00:01 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/cciss.txt                     |    2 
+ Makefile                                    |    2 
+ arch/arm/mach-pxa/include/mach/reset.h      |    9 +
+ arch/arm/mach-pxa/reset.c                   |    9 +
+ arch/arm/mach-pxa/spitz.c                   |    2 
+ arch/arm/mach-pxa/tosa.c                    |    2 
+ arch/arm/mm/cache-xsc3l2.c                  |    4 
+ arch/x86/Kconfig                            |   20 ++++
+ arch/x86/kernel/setup.c                     |   41 ++++++++
+ arch/x86/kernel/tsc.c                       |    8 -
+ drivers/acpi/dock.c                         |    5 -
+ drivers/ata/libata-eh.c                     |   21 ++--
+ drivers/block/cciss.c                       |   28 +++++
+ drivers/block/cpqarray.c                    |    7 +
+ drivers/dca/dca-core.c                      |    2 
+ drivers/dma/ioat_dma.c                      |   11 +-
+ drivers/dma/iovlock.c                       |   17 +--
+ drivers/hid/hidraw.c                        |    2 
+ drivers/md/linear.c                         |    2 
+ drivers/md/raid10.c                         |    2 
+ drivers/mmc/core/core.c                     |    6 +
+ drivers/mtd/chips/cfi_cmdset_0002.c         |   13 --
+ drivers/mtd/chips/jedec_probe.c             |   10 --
+ drivers/net/r8169.c                         |  134 ++++++++++++++--------------
+ drivers/net/wireless/iwlwifi/iwl-5000-hw.h  |    7 +
+ drivers/net/wireless/iwlwifi/iwl-5000.c     |   63 +------------
+ drivers/net/wireless/iwlwifi/iwl-agn.c      |   57 ++++++++---
+ drivers/net/wireless/iwlwifi/iwl-calib.c    |   60 ++++++++++++
+ drivers/net/wireless/iwlwifi/iwl-core.c     |   27 +----
+ drivers/net/wireless/iwlwifi/iwl-core.h     |    8 +
+ drivers/net/wireless/iwlwifi/iwl-dev.h      |   15 +--
+ drivers/net/wireless/iwlwifi/iwl-power.c    |   39 +++++++-
+ drivers/net/wireless/iwlwifi/iwl-power.h    |    4 
+ drivers/net/wireless/iwlwifi/iwl-scan.c     |    8 -
+ drivers/net/wireless/iwlwifi/iwl3945-base.c |    7 +
+ drivers/net/wireless/zd1211rw/zd_usb.c      |    2 
+ fs/ext3/super.c                             |   11 +-
+ fs/hfs/catalog.c                            |    4 
+ fs/hfsplus/bitmap.c                         |   12 ++
+ fs/hfsplus/catalog.c                        |    5 +
+ fs/jffs2/background.c                       |   10 +-
+ fs/jffs2/compr_lzo.c                        |   15 +--
+ include/asm-generic/memory_model.h          |    2 
+ include/linux/mtd/cfi.h                     |   22 +++-
+ include/net/af_unix.h                       |    1 
+ kernel/cgroup.c                             |    1 
+ mm/hugetlb.c                                |   49 +++++++++-
+ mm/internal.h                               |   29 ++++++
+ mm/page_alloc.c                             |   28 ++++-
+ net/unix/af_unix.c                          |   31 +++++-
+ net/unix/garbage.c                          |   49 +++++++---
+ security/keys/internal.h                    |    1 
+ security/keys/process_keys.c                |    2 
+ security/keys/request_key.c                 |    4 
+ sound/pci/hda/patch_sigmatel.c              |   15 +--
+ 55 files changed, 647 insertions(+), 300 deletions(-)
+
similarity index 100%
rename from queue-2.6.27/series
rename to review-2.6.27/series