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

diff --git a/queue-2.6.26/ath5k-don-t-enable-msi-we-cannot-handle-it-yet.patch b/queue-2.6.26/ath5k-don-t-enable-msi-we-cannot-handle-it-yet.patch
new file mode 100644 (file)
index 0000000..bbb2c45
--- /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
+@@ -487,9 +487,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) {
+@@ -567,7 +564,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);
+@@ -589,7 +585,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.26/b43legacy-release-mutex-in-error-handling-code.patch b/queue-2.6.26/b43legacy-release-mutex-in-error-handling-code.patch
new file mode 100644 (file)
index 0000000..cc105cb
--- /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
+@@ -3862,10 +3862,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.26/cpufreq-acpi-only-call-_ppc-after-cpufreq-acpi-init-funcs-got-called-already.patch b/queue-2.6.26/cpufreq-acpi-only-call-_ppc-after-cpufreq-acpi-init-funcs-got-called-already.patch
new file mode 100644 (file)
index 0000000..8a8142b
--- /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
+@@ -825,6 +825,9 @@ static int cpufreq_add_dev(struct sys_de
+       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
+@@ -109,6 +109,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.26/ecryptfs-use-page_alloc-not-kmalloc-to-get-a-page-of-memory.patch b/queue-2.6.26/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.26/ixgbe-remove-device-id-for-unsupported-device.patch b/queue-2.6.26/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.26/markers-fix-markers-read-barrier-for-multiple-probes.patch b/queue-2.6.26/markers-fix-markers-read-barrier-for-multiple-probes.patch
new file mode 100644 (file)
index 0000000..fa02426
--- /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
+@@ -127,6 +127,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
+@@ -134,7 +139,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,
+@@ -177,6 +181,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
+@@ -184,7 +193,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.26/mpc52xx_psc_spi-fix-block-transfer.patch b/queue-2.6.26/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 ebccbab3a28cbde2b03b8bc367ce7e4d9e64b843..d1f05b8081a51519b036c4eda55ffb1e69eebd65 100644 (file)
@@ -48,3 +48,14 @@ dvb-cx23885-ensure-pad_ctrl-is-always-reset-to-a-sensible-default.patch
 dvb-cx23885-dvb-transport-cards-using-dvb-port-vidb-ts1-did-not-stream.patch
 dvb-cx23885-reallocated-the-sram-to-avoid-concurrent-vidb-c-issues.patch
 dvb-cx23885-sram-changes-for-the-885-and-887-silicon-parts.patch
+x86-fix-kernel_physical_mapping_init-for-large-x86-systems.patch
+ecryptfs-use-page_alloc-not-kmalloc-to-get-a-page-of-memory.patch
+uml-fix-boot-crash.patch
+ixgbe-remove-device-id-for-unsupported-device.patch
+mpc52xx_psc_spi-fix-block-transfer.patch
+tmpfs-fix-kernel-bug-in-shmem_delete_inode.patch
+markers-fix-markers-read-barrier-for-multiple-probes.patch
+vfs-increase-pseudo-filesystem-block-size-to-page_size.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.26/tmpfs-fix-kernel-bug-in-shmem_delete_inode.patch b/queue-2.6.26/tmpfs-fix-kernel-bug-in-shmem_delete_inode.patch
new file mode 100644 (file)
index 0000000..a175087
--- /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
+@@ -1503,7 +1503,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();
+@@ -1518,6 +1517,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,
+@@ -1907,6 +1907,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.26/uml-fix-boot-crash.patch b/queue-2.6.26/uml-fix-boot-crash.patch
new file mode 100644 (file)
index 0000000..13698df
--- /dev/null
@@ -0,0 +1,49 @@
+From 7c1fed03b9fa32d4323d5caa6a9c7dcdd7eba767 Mon Sep 17 00:00:00 2001
+From: Jeff Dike <jdike@addtoit.com>
+Date: Wed, 23 Jul 2008 11:46:50 -0400
+Subject: [PATCH] UML - Fix boot crash
+
+From: Jeff Dike <jdike@addtoit.com>
+
+commit 7c1fed03b9fa32d4323d5caa6a9c7dcdd7eba767 upstream
+
+My copying of linux/init.h didn't go far enough.  The definition of
+__used singled out gcc minor version 3, but didn't care what the major
+version was.  This broke when unit-at-a-time was added and gcc started
+throwing out initcalls.
+
+This results in an early boot crash when ptrace tries to initialize a
+process with an empty, uninitialized register set.
+
+Signed-off-by: Jeff Dike <jdike@linux.intel.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/um/include/init.h |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/arch/um/include/init.h
++++ b/arch/um/include/init.h
+@@ -45,6 +45,8 @@ typedef void (*exitcall_t)(void);
+ # define __section(S) __attribute__ ((__section__(#S)))
+ #endif
++#if __GNUC__ == 3
++
+ #if __GNUC_MINOR__ >= 3
+ # define __used                       __attribute__((__used__))
+ #else
+@@ -52,6 +54,12 @@ typedef void (*exitcall_t)(void);
+ #endif
+ #else
++#if __GNUC__ == 4
++# define __used                       __attribute__((__used__))
++#endif
++#endif
++
++#else
+ #include <linux/compiler.h>
+ #endif
+ /* These are for everybody (although not all archs will actually
diff --git a/queue-2.6.26/vfs-increase-pseudo-filesystem-block-size-to-page_size.patch b/queue-2.6.26/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.26/x86-fix-kernel_physical_mapping_init-for-large-x86-systems.patch b/queue-2.6.26/x86-fix-kernel_physical_mapping_init-for-large-x86-systems.patch
new file mode 100644 (file)
index 0000000..f9a4bfa
--- /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
+@@ -579,7 +579,7 @@ unsigned long __init_refok init_memory_m
+               else
+                       pud = alloc_low_page(&pud_phys);
+-              next = start + PGDIR_SIZE;
++              next = (start + PGDIR_SIZE) & PGDIR_MASK;
+               if (next > end)
+                       next = end;
+               last_map_addr = phys_pud_init(pud, __pa(start), __pa(next));