]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
more .25 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Wed, 30 Jul 2008 21:38:53 +0000 (14:38 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 30 Jul 2008 21:38:53 +0000 (14:38 -0700)
queue-2.6.25/ath5k-don-t-enable-msi-we-cannot-handle-it-yet.patch [new file with mode: 0644]
queue-2.6.25/b43legacy-release-mutex-in-error-handling-code.patch [new file with mode: 0644]
queue-2.6.25/cpufreq-acpi-only-call-_ppc-after-cpufreq-acpi-init-funcs-got-called-already.patch [new file with mode: 0644]
queue-2.6.25/ecryptfs-use-page_alloc-not-kmalloc-to-get-a-page-of-memory.patch [new file with mode: 0644]
queue-2.6.25/ixgbe-remove-device-id-for-unsupported-device.patch [new file with mode: 0644]
queue-2.6.25/markers-fix-markers-read-barrier-for-multiple-probes.patch [new file with mode: 0644]
queue-2.6.25/mpc52xx_psc_spi-fix-block-transfer.patch [new file with mode: 0644]
queue-2.6.25/series
queue-2.6.25/tmpfs-fix-kernel-bug-in-shmem_delete_inode.patch [new file with mode: 0644]
queue-2.6.25/vfs-increase-pseudo-filesystem-block-size-to-page_size.patch [new file with mode: 0644]
queue-2.6.25/x86-fix-kernel_physical_mapping_init-for-large-x86-systems.patch [new file with mode: 0644]

diff --git a/queue-2.6.25/ath5k-don-t-enable-msi-we-cannot-handle-it-yet.patch b/queue-2.6.25/ath5k-don-t-enable-msi-we-cannot-handle-it-yet.patch
new file mode 100644 (file)
index 0000000..003397a
--- /dev/null
@@ -0,0 +1,52 @@
+From jejb@kernel.org  Wed Jul 30 14:15:36 2008
+From: Pavel Roskin <proski@gnu.org>
+Date: Wed, 30 Jul 2008 18:20:14 GMT
+Subject: ath5k: don't enable MSI, we cannot handle it yet
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200807301820.m6UIKELK025900@hera.kernel.org>
+
+From: Pavel Roskin <proski@gnu.org>
+
+commit 256b152b005e319f985f50f2a910a75ba0def74f upstream
+
+MSI is a nice thing, but we cannot enable it without changing the
+interrupt handler.  If we do it, we break MSI capable hardware,
+specifically AR5006 chipset.
+
+Signed-off-by: Pavel Roskin <proski@gnu.org>
+Acked-by: Nick Kossifidis <mickflemm@gmail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/ath5k/base.c |    5 -----
+ 1 file changed, 5 deletions(-)
+
+--- a/drivers/net/wireless/ath5k/base.c
++++ b/drivers/net/wireless/ath5k/base.c
+@@ -484,9 +484,6 @@ ath5k_pci_probe(struct pci_dev *pdev,
+       /* Set private data */
+       pci_set_drvdata(pdev, hw);
+-      /* Enable msi for devices that support it */
+-      pci_enable_msi(pdev);
+-
+       /* Setup interrupt handler */
+       ret = request_irq(pdev->irq, ath5k_intr, IRQF_SHARED, "ath", sc);
+       if (ret) {
+@@ -553,7 +550,6 @@ err_ah:
+ err_irq:
+       free_irq(pdev->irq, sc);
+ err_free:
+-      pci_disable_msi(pdev);
+       ieee80211_free_hw(hw);
+ err_map:
+       pci_iounmap(pdev, mem);
+@@ -575,7 +571,6 @@ ath5k_pci_remove(struct pci_dev *pdev)
+       ath5k_detach(pdev, hw);
+       ath5k_hw_detach(sc->ah);
+       free_irq(pdev->irq, sc);
+-      pci_disable_msi(pdev);
+       pci_iounmap(pdev, sc->iobase);
+       pci_release_region(pdev, 0);
+       pci_disable_device(pdev);
diff --git a/queue-2.6.25/b43legacy-release-mutex-in-error-handling-code.patch b/queue-2.6.25/b43legacy-release-mutex-in-error-handling-code.patch
new file mode 100644 (file)
index 0000000..9dc77cc
--- /dev/null
@@ -0,0 +1,59 @@
+From jejb@kernel.org  Wed Jul 30 14:15:03 2008
+From: Julia Lawall <julia@diku.dk>
+Date: Wed, 30 Jul 2008 18:20:12 GMT
+Subject: b43legacy: Release mutex in error handling code
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200807301820.m6UIKCFB025870@hera.kernel.org>
+
+From: Julia Lawall <julia@diku.dk>
+
+commit 4104863fb4a724723d1d5f3cba9d3c5084087e45 upstream
+
+The mutex is released on a successful return, so it would seem that it
+should be released on an error return as well.
+
+The semantic patch finds this problem is as follows:
+(http://www.emn.fr/x-info/coccinelle/)
+
+// <smpl>
+@@
+expression l;
+@@
+
+mutex_lock(l);
+.. when != mutex_unlock(l)
+    when any
+    when strict
+(
+if (...) { ... when != mutex_unlock(l)
++   mutex_unlock(l);
+    return ...;
+}
+|
+mutex_unlock(l);
+)
+// </smpl>
+
+Signed-off-by: Julia Lawall <julia@diku.dk>
+Signed-off-by: Michael Buesch <mb@bu3sch.de>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/b43legacy/main.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/b43legacy/main.c
++++ b/drivers/net/wireless/b43legacy/main.c
+@@ -3792,10 +3792,10 @@ static int b43legacy_resume(struct ssb_d
+                       goto out;
+               }
+       }
+-      mutex_unlock(&wl->mutex);
+       b43legacydbg(wl, "Device resumed.\n");
+ out:
++      mutex_unlock(&wl->mutex);
+       return err;
+ }
diff --git a/queue-2.6.25/cpufreq-acpi-only-call-_ppc-after-cpufreq-acpi-init-funcs-got-called-already.patch b/queue-2.6.25/cpufreq-acpi-only-call-_ppc-after-cpufreq-acpi-init-funcs-got-called-already.patch
new file mode 100644 (file)
index 0000000..8846c3e
--- /dev/null
@@ -0,0 +1,112 @@
+From jejb@kernel.org  Wed Jul 30 14:14:28 2008
+From: Thomas Renninger <trenn@suse.de>
+Date: Wed, 30 Jul 2008 18:20:10 GMT
+Subject: cpufreq acpi: only call _PPC after cpufreq ACPI init funcs got called already
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200807301820.m6UIKAtd025816@hera.kernel.org>
+
+From: Thomas Renninger <trenn@suse.de>
+
+commit a1531acd43310a7e4571d52e8846640667f4c74b upstream
+
+Ingo Molnar provided a fix to not call _PPC at processor driver
+initialization time in "[PATCH] ACPI: fix cpufreq regression" (git
+commit e4233dec749a3519069d9390561b5636a75c7579)
+
+But it can still happen that _PPC is called at processor driver
+initialization time.
+
+This patch should make sure that this is not possible anymore.
+
+Signed-off-by: Thomas Renninger <trenn@suse.de>
+Cc: Andi Kleen <andi@firstfloor.org>
+Cc: Len Brown <lenb@kernel.org>
+Cc: Dave Jones <davej@codemonkey.org.uk>
+Cc: Ingo Molnar <mingo@elte.hu>
+Cc: Venkatesh Pallipadi <venkatesh.pallipadi@intel.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>
+
+---
+ arch/powerpc/platforms/cell/cbe_cpufreq_pmi.c |    6 ++++++
+ drivers/acpi/processor_perflib.c              |   15 +++++++++++++--
+ drivers/cpufreq/cpufreq.c                     |    3 +++
+ include/linux/cpufreq.h                       |    1 +
+ 4 files changed, 23 insertions(+), 2 deletions(-)
+
+--- a/arch/powerpc/platforms/cell/cbe_cpufreq_pmi.c
++++ b/arch/powerpc/platforms/cell/cbe_cpufreq_pmi.c
+@@ -96,6 +96,12 @@ static int pmi_notifier(struct notifier_
+       struct cpufreq_frequency_table *cbe_freqs;
+       u8 node;
++      /* Should this really be called for CPUFREQ_ADJUST, CPUFREQ_INCOMPATIBLE
++       * and CPUFREQ_NOTIFY policy events?)
++       */
++      if (event == CPUFREQ_START)
++              return 0;
++
+       cbe_freqs = cpufreq_frequency_get_table(policy->cpu);
+       node = cbe_cpu_to_node(policy->cpu);
+--- a/drivers/acpi/processor_perflib.c
++++ b/drivers/acpi/processor_perflib.c
+@@ -64,7 +64,13 @@ static DEFINE_MUTEX(performance_mutex);
+  * policy is adjusted accordingly.
+  */
+-static unsigned int ignore_ppc = 0;
++/* ignore_ppc:
++ * -1 -> cpufreq low level drivers not initialized -> _PSS, etc. not called yet
++ *       ignore _PPC
++ *  0 -> cpufreq low level drivers initialized -> consider _PPC values
++ *  1 -> ignore _PPC totally -> forced by user through boot param
++ */
++static unsigned int ignore_ppc = -1;
+ module_param(ignore_ppc, uint, 0644);
+ MODULE_PARM_DESC(ignore_ppc, "If the frequency of your machine gets wrongly" \
+                "limited by BIOS, this should help");
+@@ -72,7 +78,7 @@ MODULE_PARM_DESC(ignore_ppc, "If the fre
+ #define PPC_REGISTERED   1
+ #define PPC_IN_USE       2
+-static int acpi_processor_ppc_status = 0;
++static int acpi_processor_ppc_status;
+ static int acpi_processor_ppc_notifier(struct notifier_block *nb,
+                                      unsigned long event, void *data)
+@@ -81,6 +87,11 @@ static int acpi_processor_ppc_notifier(s
+       struct acpi_processor *pr;
+       unsigned int ppc = 0;
++      if (event == CPUFREQ_START && ignore_ppc <= 0) {
++              ignore_ppc = 0;
++              return 0;
++      }
++
+       if (ignore_ppc)
+               return 0;
+--- a/drivers/cpufreq/cpufreq.c
++++ b/drivers/cpufreq/cpufreq.c
+@@ -806,6 +806,9 @@ static int cpufreq_add_dev (struct sys_d
+       policy->user_policy.min = policy->cpuinfo.min_freq;
+       policy->user_policy.max = policy->cpuinfo.max_freq;
++      blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
++                                   CPUFREQ_START, policy);
++
+ #ifdef CONFIG_SMP
+ #ifdef CONFIG_HOTPLUG_CPU
+--- a/include/linux/cpufreq.h
++++ b/include/linux/cpufreq.h
+@@ -108,6 +108,7 @@ struct cpufreq_policy {
+ #define CPUFREQ_ADJUST                (0)
+ #define CPUFREQ_INCOMPATIBLE  (1)
+ #define CPUFREQ_NOTIFY                (2)
++#define CPUFREQ_START         (3)
+ #define CPUFREQ_SHARED_TYPE_NONE (0) /* None */
+ #define CPUFREQ_SHARED_TYPE_HW         (1) /* HW does needed coordination */
diff --git a/queue-2.6.25/ecryptfs-use-page_alloc-not-kmalloc-to-get-a-page-of-memory.patch b/queue-2.6.25/ecryptfs-use-page_alloc-not-kmalloc-to-get-a-page-of-memory.patch
new file mode 100644 (file)
index 0000000..0174ac7
--- /dev/null
@@ -0,0 +1,119 @@
+From jejb@kernel.org  Wed Jul 30 14:09:36 2008
+From: Eric Sandeen <sandeen@redhat.com>
+Date: Tue, 29 Jul 2008 02:50:12 GMT
+Subject: eCryptfs: use page_alloc not kmalloc to get a page of memory
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200807290250.m6T2oCUK016734@hera.kernel.org>
+
+From: Eric Sandeen <sandeen@redhat.com>
+
+commit 7fcba054373d5dfc43d26e243a5c9b92069972ee upstream
+Date: Mon, 28 Jul 2008 15:46:39 -0700
+Subject: eCryptfs: use page_alloc not kmalloc to get a page of memory
+
+With SLUB debugging turned on in 2.6.26, I was getting memory corruption
+when testing eCryptfs.  The root cause turned out to be that eCryptfs was
+doing kmalloc(PAGE_CACHE_SIZE); virt_to_page() and treating that as a nice
+page-aligned chunk of memory.  But at least with SLUB debugging on, this
+is not always true, and the page we get from virt_to_page does not
+necessarily match the PAGE_CACHE_SIZE worth of memory we got from kmalloc.
+
+My simple testcase was 2 loops doing "rm -f fileX; cp /tmp/fileX ." for 2
+different multi-megabyte files.  With this change I no longer see the
+corruption.
+
+Signed-off-by: Eric Sandeen <sandeen@redhat.com>
+Acked-by: Michael Halcrow <mhalcrow@us.ibm.com>
+Acked-by: Rik van Riel <riel@redhat.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/ecryptfs/crypto.c |   30 ++++++++++++++++++------------
+ 1 file changed, 18 insertions(+), 12 deletions(-)
+
+--- a/fs/ecryptfs/crypto.c
++++ b/fs/ecryptfs/crypto.c
+@@ -474,8 +474,8 @@ int ecryptfs_encrypt_page(struct page *p
+ {
+       struct inode *ecryptfs_inode;
+       struct ecryptfs_crypt_stat *crypt_stat;
+-      char *enc_extent_virt = NULL;
+-      struct page *enc_extent_page;
++      char *enc_extent_virt;
++      struct page *enc_extent_page = NULL;
+       loff_t extent_offset;
+       int rc = 0;
+@@ -491,14 +491,14 @@ int ecryptfs_encrypt_page(struct page *p
+                              page->index);
+               goto out;
+       }
+-      enc_extent_virt = kmalloc(PAGE_CACHE_SIZE, GFP_USER);
+-      if (!enc_extent_virt) {
++      enc_extent_page = alloc_page(GFP_USER);
++      if (!enc_extent_page) {
+               rc = -ENOMEM;
+               ecryptfs_printk(KERN_ERR, "Error allocating memory for "
+                               "encrypted extent\n");
+               goto out;
+       }
+-      enc_extent_page = virt_to_page(enc_extent_virt);
++      enc_extent_virt = kmap(enc_extent_page);
+       for (extent_offset = 0;
+            extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size);
+            extent_offset++) {
+@@ -526,7 +526,10 @@ int ecryptfs_encrypt_page(struct page *p
+               }
+       }
+ out:
+-      kfree(enc_extent_virt);
++      if (enc_extent_page) {
++              kunmap(enc_extent_page);
++              __free_page(enc_extent_page);
++      }
+       return rc;
+ }
+@@ -608,8 +611,8 @@ int ecryptfs_decrypt_page(struct page *p
+ {
+       struct inode *ecryptfs_inode;
+       struct ecryptfs_crypt_stat *crypt_stat;
+-      char *enc_extent_virt = NULL;
+-      struct page *enc_extent_page;
++      char *enc_extent_virt;
++      struct page *enc_extent_page = NULL;
+       unsigned long extent_offset;
+       int rc = 0;
+@@ -626,14 +629,14 @@ int ecryptfs_decrypt_page(struct page *p
+                              page->index);
+               goto out;
+       }
+-      enc_extent_virt = kmalloc(PAGE_CACHE_SIZE, GFP_USER);
+-      if (!enc_extent_virt) {
++      enc_extent_page = alloc_page(GFP_USER);
++      if (!enc_extent_page) {
+               rc = -ENOMEM;
+               ecryptfs_printk(KERN_ERR, "Error allocating memory for "
+                               "encrypted extent\n");
+               goto out;
+       }
+-      enc_extent_page = virt_to_page(enc_extent_virt);
++      enc_extent_virt = kmap(enc_extent_page);
+       for (extent_offset = 0;
+            extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size);
+            extent_offset++) {
+@@ -661,7 +664,10 @@ int ecryptfs_decrypt_page(struct page *p
+               }
+       }
+ out:
+-      kfree(enc_extent_virt);
++      if (enc_extent_page) {
++              kunmap(enc_extent_page);
++              __free_page(enc_extent_page);
++      }
+       return rc;
+ }
diff --git a/queue-2.6.25/ixgbe-remove-device-id-for-unsupported-device.patch b/queue-2.6.25/ixgbe-remove-device-id-for-unsupported-device.patch
new file mode 100644 (file)
index 0000000..2f63482
--- /dev/null
@@ -0,0 +1,35 @@
+From bb5d10ac8cc315d53306963001fe650d88a1cbb2 Mon Sep 17 00:00:00 2001
+From: Jesse Brandeburg <jesse.brandeburg@intel.com>
+Date: Fri, 11 Jul 2008 17:34:58 -0700
+Subject: [PATCH] ixgbe: remove device ID for unsupported device
+
+From: Jesse Brandeburg <jesse.brandeburg@intel.com>
+
+commit bb5d10ac8cc315d53306963001fe650d88a1cbb2 upstream
+
+The ixgbe driver was untested with device ID 8086:10c8 but still advertises
+support.  Currently if this device is present in the system when the driver
+is loaded, the system will panic.
+Remove this device ID until full support can be tested with available
+hardware.  This patch is necessary for 2.6.24, 2.6.25 and 2.6.26
+
+Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/ixgbe/ixgbe_main.c |    2 --
+ 1 file changed, 2 deletions(-)
+
+--- a/drivers/net/ixgbe/ixgbe_main.c
++++ b/drivers/net/ixgbe/ixgbe_main.c
+@@ -70,8 +70,6 @@ static struct pci_device_id ixgbe_pci_tb
+        board_82598 },
+       {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598AF_SINGLE_PORT),
+        board_82598 },
+-      {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598AT_DUAL_PORT),
+-       board_82598 },
+       {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598EB_CX4),
+        board_82598 },
diff --git a/queue-2.6.25/markers-fix-markers-read-barrier-for-multiple-probes.patch b/queue-2.6.25/markers-fix-markers-read-barrier-for-multiple-probes.patch
new file mode 100644 (file)
index 0000000..3ab35f1
--- /dev/null
@@ -0,0 +1,81 @@
+From jejb@kernel.org  Wed Jul 30 14:12:51 2008
+From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+Date: Wed, 30 Jul 2008 18:20:05 GMT
+Subject: markers: fix markers read barrier for multiple probes
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200807301820.m6UIK5jD025768@hera.kernel.org>
+
+From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+
+commit 5def9a3a22e09c99717f41ab7f07ec9e1a1f3ec8 upstream
+
+Paul pointed out two incorrect read barriers in the marker handler code in
+the path where multiple probes are connected.  Those are ordering reads of
+"ptype" (single or multi probe marker), "multi" array pointer, and "multi"
+array data access.
+
+It should be ordered like this :
+
+read ptype
+smp_rmb()
+read multi array pointer
+smp_read_barrier_depends()
+access data referenced by multi array pointer
+
+The code with a single probe connected (optimized case, does not have to
+allocate an array) has correct memory ordering.
+
+It applies to kernel 2.6.26.x, 2.6.25.x and linux-next.
+
+Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/marker.c |   12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+--- a/kernel/marker.c
++++ b/kernel/marker.c
+@@ -126,6 +126,11 @@ void marker_probe_cb(const struct marker
+               struct marker_probe_closure *multi;
+               int i;
+               /*
++               * Read mdata->ptype before mdata->multi.
++               */
++              smp_rmb();
++              multi = mdata->multi;
++              /*
+                * multi points to an array, therefore accessing the array
+                * depends on reading multi. However, even in this case,
+                * we must insure that the pointer is read _before_ the array
+@@ -133,7 +138,6 @@ void marker_probe_cb(const struct marker
+                * in the fast path, so put the explicit barrier here.
+                */
+               smp_read_barrier_depends();
+-              multi = mdata->multi;
+               for (i = 0; multi[i].func; i++) {
+                       va_start(args, fmt);
+                       multi[i].func(multi[i].probe_private, call_private, fmt,
+@@ -176,6 +180,11 @@ void marker_probe_cb_noarg(const struct 
+               struct marker_probe_closure *multi;
+               int i;
+               /*
++               * Read mdata->ptype before mdata->multi.
++               */
++              smp_rmb();
++              multi = mdata->multi;
++              /*
+                * multi points to an array, therefore accessing the array
+                * depends on reading multi. However, even in this case,
+                * we must insure that the pointer is read _before_ the array
+@@ -183,7 +192,6 @@ void marker_probe_cb_noarg(const struct 
+                * in the fast path, so put the explicit barrier here.
+                */
+               smp_read_barrier_depends();
+-              multi = mdata->multi;
+               for (i = 0; multi[i].func; i++)
+                       multi[i].func(multi[i].probe_private, call_private, fmt,
+                               &args);
diff --git a/queue-2.6.25/mpc52xx_psc_spi-fix-block-transfer.patch b/queue-2.6.25/mpc52xx_psc_spi-fix-block-transfer.patch
new file mode 100644 (file)
index 0000000..ea7eba2
--- /dev/null
@@ -0,0 +1,71 @@
+From jejb@kernel.org  Wed Jul 30 14:11:31 2008
+From: Luotao Fu <l.fu@pengutronix.de>
+Date: Tue, 29 Jul 2008 02:50:14 GMT
+Subject: mpc52xx_psc_spi: fix block transfer
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200807290250.m6T2oEGC016751@hera.kernel.org>
+
+From: Luotao Fu <l.fu@pengutronix.de>
+
+commit 9a7867e1b34c3575e7e76a05c0c54c6edbdae2a4 upstream
+
+The block transfer routine in the mpc52xx psc spi driver misinterpret
+the datasheet.  According to the processor datasheet the chipselect is
+held as long as the EOF is not written.
+
+Theoretically blocks of any sizes can be transferred in this way.  The
+old routine however writes an EOF after every word, which has the size
+of size_of_word.  This makes the transfer slow.
+
+Also fixed some duplicate code.
+
+Signed-off-by: Luotao Fu <l.fu@pengutronix.de>
+Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/spi/mpc52xx_psc_spi.c |   22 +++++++---------------
+ 1 file changed, 7 insertions(+), 15 deletions(-)
+
+--- a/drivers/spi/mpc52xx_psc_spi.c
++++ b/drivers/spi/mpc52xx_psc_spi.c
+@@ -148,7 +148,6 @@ static int mpc52xx_psc_spi_transfer_rxtx
+       unsigned rfalarm;
+       unsigned send_at_once = MPC52xx_PSC_BUFSIZE;
+       unsigned recv_at_once;
+-      unsigned bpw = mps->bits_per_word / 8;
+       if (!t->tx_buf && !t->rx_buf && t->len)
+               return -EINVAL;
+@@ -164,22 +163,15 @@ static int mpc52xx_psc_spi_transfer_rxtx
+               }
+               dev_dbg(&spi->dev, "send %d bytes...\n", send_at_once);
+-              if (tx_buf) {
+-                      for (; send_at_once; sb++, send_at_once--) {
+-                              /* set EOF flag */
+-                              if (mps->bits_per_word
+-                                              && (sb + 1) % bpw == 0)
+-                                      out_8(&psc->ircr2, 0x01);
++              for (; send_at_once; sb++, send_at_once--) {
++                      /* set EOF flag before the last word is sent */
++                      if (send_at_once == 1)
++                              out_8(&psc->ircr2, 0x01);
++
++                      if (tx_buf)
+                               out_8(&psc->mpc52xx_psc_buffer_8, tx_buf[sb]);
+-                      }
+-              } else {
+-                      for (; send_at_once; sb++, send_at_once--) {
+-                              /* set EOF flag */
+-                              if (mps->bits_per_word
+-                                              && ((sb + 1) % bpw) == 0)
+-                                      out_8(&psc->ircr2, 0x01);
++                      else
+                               out_8(&psc->mpc52xx_psc_buffer_8, 0);
+-                      }
+               }
index 46dc265a4e355beaa96e6c126fa9aa0e636264f5..8e15c76c1439c1460ec7ca550caac455bfc339e3 100644 (file)
@@ -14,3 +14,13 @@ arm-fix-fls-for-64-bit-arguments.patch
 alsa-hda-fix-alc262_sony_unsol-hda_verb-array.patch
 alsa-trident-pause-s-pdif-output.patch
 ahci-retry-enabling-ahci-a-few-times-before-spitting-out-warn_on.patch
+x86-fix-kernel_physical_mapping_init-for-large-x86-systems.patch
+vfs-increase-pseudo-filesystem-block-size-to-page_size.patch
+tmpfs-fix-kernel-bug-in-shmem_delete_inode.patch
+mpc52xx_psc_spi-fix-block-transfer.patch
+markers-fix-markers-read-barrier-for-multiple-probes.patch
+ixgbe-remove-device-id-for-unsupported-device.patch
+ecryptfs-use-page_alloc-not-kmalloc-to-get-a-page-of-memory.patch
+cpufreq-acpi-only-call-_ppc-after-cpufreq-acpi-init-funcs-got-called-already.patch
+b43legacy-release-mutex-in-error-handling-code.patch
+ath5k-don-t-enable-msi-we-cannot-handle-it-yet.patch
diff --git a/queue-2.6.25/tmpfs-fix-kernel-bug-in-shmem_delete_inode.patch b/queue-2.6.25/tmpfs-fix-kernel-bug-in-shmem_delete_inode.patch
new file mode 100644 (file)
index 0000000..e8884b9
--- /dev/null
@@ -0,0 +1,58 @@
+From jejb@kernel.org  Wed Jul 30 14:12:11 2008
+From: Hugh Dickins <hugh@veritas.com>
+Date: Tue, 29 Jul 2008 02:50:18 GMT
+Subject: tmpfs: fix kernel BUG in shmem_delete_inode
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200807290250.m6T2oItN016780@hera.kernel.org>
+
+From: Hugh Dickins <hugh@veritas.com>
+
+commit 14fcc23fdc78e9d32372553ccf21758a9bd56fa1 upstream
+
+SuSE's insserve initscript ordering program hits kernel BUG at mm/shmem.c:814
+on 2.6.26.  It's using posix_fadvise on directories, and the shmem_readpage
+method added in 2.6.23 is letting POSIX_FADV_WILLNEED allocate useless pages
+to a tmpfs directory, incrementing i_blocks count but never decrementing it.
+
+Fix this by assigning shmem_aops (pointing to readpage and writepage and
+set_page_dirty) only when it's needed, on a regular file or a long symlink.
+
+Many thanks to Kel for outstanding bugreport and steps to reproduce it.
+
+Reported-by: Kel Modderman <kel@otaku42.de>
+Tested-by: Kel Modderman <kel@otaku42.de>
+Signed-off-by: Hugh Dickins <hugh@veritas.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ mm/shmem.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/mm/shmem.c
++++ b/mm/shmem.c
+@@ -1559,7 +1559,6 @@ shmem_get_inode(struct super_block *sb, 
+               inode->i_uid = current->fsuid;
+               inode->i_gid = current->fsgid;
+               inode->i_blocks = 0;
+-              inode->i_mapping->a_ops = &shmem_aops;
+               inode->i_mapping->backing_dev_info = &shmem_backing_dev_info;
+               inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
+               inode->i_generation = get_seconds();
+@@ -1574,6 +1573,7 @@ shmem_get_inode(struct super_block *sb, 
+                       init_special_inode(inode, mode, dev);
+                       break;
+               case S_IFREG:
++                      inode->i_mapping->a_ops = &shmem_aops;
+                       inode->i_op = &shmem_inode_operations;
+                       inode->i_fop = &shmem_file_operations;
+                       mpol_shared_policy_init(&info->policy, sbinfo->policy,
+@@ -1964,6 +1964,7 @@ static int shmem_symlink(struct inode *d
+                       return error;
+               }
+               unlock_page(page);
++              inode->i_mapping->a_ops = &shmem_aops;
+               inode->i_op = &shmem_symlink_inode_operations;
+               kaddr = kmap_atomic(page, KM_USER0);
+               memcpy(kaddr, symname, len);
diff --git a/queue-2.6.25/vfs-increase-pseudo-filesystem-block-size-to-page_size.patch b/queue-2.6.25/vfs-increase-pseudo-filesystem-block-size-to-page_size.patch
new file mode 100644 (file)
index 0000000..c364053
--- /dev/null
@@ -0,0 +1,54 @@
+From jejb@kernel.org  Wed Jul 30 14:13:33 2008
+From: Alex Nixon <alex.nixon@citrix.com>
+Date: Wed, 30 Jul 2008 18:20:08 GMT
+Subject: VFS: increase pseudo-filesystem block size to PAGE_SIZE
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200807301820.m6UIK8W8025794@hera.kernel.org>
+
+From: Alex Nixon <alex.nixon@citrix.com>
+
+commit 3971e1a917548977cff71418a7c3575ffbc9571f upstream
+
+This commit:
+
+    commit ba52de123d454b57369f291348266d86f4b35070
+    Author: Theodore Ts'o <tytso@mit.edu>
+    Date:   Wed Sep 27 01:50:49 2006 -0700
+
+        [PATCH] inode-diet: Eliminate i_blksize from the inode structure
+
+caused the block size used by pseudo-filesystems to decrease from
+PAGE_SIZE to 1024 leading to a doubling of the number of context switches
+during a kernbench run.
+
+Signed-off-by: Alex Nixon <Alex.Nixon@citrix.com>
+Cc: Andi Kleen <andi@firstfloor.org>
+Cc: Jeremy Fitzhardinge <jeremy@goop.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Ingo Molnar <mingo@elte.hu>
+Cc: Ian Campbell <Ian.Campbell@eu.citrix.com>
+Cc: "Theodore Ts'o" <tytso@mit.edu>
+Cc: Alexander Viro <viro@zeniv.linux.org.uk>
+Cc: Hugh Dickins <hugh@veritas.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>
+
+---
+ fs/libfs.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/fs/libfs.c
++++ b/fs/libfs.c
+@@ -216,8 +216,8 @@ int get_sb_pseudo(struct file_system_typ
+       s->s_flags = MS_NOUSER;
+       s->s_maxbytes = ~0ULL;
+-      s->s_blocksize = 1024;
+-      s->s_blocksize_bits = 10;
++      s->s_blocksize = PAGE_SIZE;
++      s->s_blocksize_bits = PAGE_SHIFT;
+       s->s_magic = magic;
+       s->s_op = ops ? ops : &simple_super_operations;
+       s->s_time_gran = 1;
diff --git a/queue-2.6.25/x86-fix-kernel_physical_mapping_init-for-large-x86-systems.patch b/queue-2.6.25/x86-fix-kernel_physical_mapping_init-for-large-x86-systems.patch
new file mode 100644 (file)
index 0000000..e2fb354
--- /dev/null
@@ -0,0 +1,39 @@
+From mingo@elte.hu  Wed Jul 30 14:06:51 2008
+From: Ingo Molnar <mingo@elte.hu>
+Date: Sun, 20 Jul 2008 17:24:03 +0200
+Subject: x86: fix kernel_physical_mapping_init() for large x86 systems
+To: Oliver Pinter <oliver.pntr@gmail.com>
+Cc: linux-mm@kvack.org, Jack Steiner <steiner@sgi.com>, stable@kernel.org
+Message-ID: <20080720152403.GA8449@elte.hu>
+Content-Disposition: inline
+
+From: Ingo Molnar <mingo@elte.hu>
+
+based on e22146e610bb7aed63282148740ab1d1b91e1d90 upstream
+
+Fix bug in kernel_physical_mapping_init() that causes kernel
+page table to be built incorrectly for systems with greater
+than 512GB of memory.
+
+Signed-off-by: Jack Steiner <steiner@sgi.com>
+Cc: linux-mm@kvack.org
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Cc: Oliver Pinter <oliver.pntr@gmail.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/mm/init_64.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/x86/mm/init_64.c
++++ b/arch/x86/mm/init_64.c
+@@ -427,7 +427,7 @@ void __init_refok init_memory_mapping(un
+               else
+                       pud = alloc_low_page(&pud_phys);
+-              next = start + PGDIR_SIZE;
++              next = (start + PGDIR_SIZE) & PGDIR_MASK;
+               if (next > end)
+                       next = end;
+               phys_pud_init(pud, __pa(start), __pa(next));