]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
.36 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Tue, 15 Feb 2011 00:41:56 +0000 (16:41 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 15 Feb 2011 00:41:56 +0000 (16:41 -0800)
queue-2.6.36/ath9k-fix-race-conditions-when-stop-device.patch [deleted file]
queue-2.6.36/ext4-fix-memory-leak-in-ext4_free_branches.patch [new file with mode: 0644]
queue-2.6.36/mm-fix-migration-hangs-on-anon_vma-lock.patch [new file with mode: 0644]
queue-2.6.36/nfs-fix-an-nfs-client-lockdep-issue.patch [new file with mode: 0644]
queue-2.6.36/nfs-fix-kernel-bug-at-fs-aio.c-554.patch [new file with mode: 0644]
queue-2.6.36/proc-kcore-fix-seeking.patch [new file with mode: 0644]
queue-2.6.36/rdma-cxgb4-set-the-correct-device-physical-function-for-iwarp-connections.patch [new file with mode: 0644]
queue-2.6.36/rtc-cmos-fix-suspend-resume.patch [new file with mode: 0644]
queue-2.6.36/series

diff --git a/queue-2.6.36/ath9k-fix-race-conditions-when-stop-device.patch b/queue-2.6.36/ath9k-fix-race-conditions-when-stop-device.patch
deleted file mode 100644 (file)
index 75f47fd..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-From 203043f579ece44bb30291442cd56332651dd37d Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Tue, 25 Jan 2011 14:08:40 +0100
-Subject: ath9k: fix race conditions when stop device
-
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-
-commit 203043f579ece44bb30291442cd56332651dd37d upstream.
-
-We do not kill any scheduled tasklets when stopping device, that may
-cause usage of resources after free. Moreover we enable interrupts
-in tasklet function, so we could potentially end with interrupts
-enabled when driver is not ready to receive them.
-
-I think patch should fix Ben's kernel crash from:
-http://marc.info/?l=linux-wireless&m=129438358921501&w=2
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
-Signed-off-by: John W. Linville <linville@tuxdriver.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/net/wireless/ath/ath9k/init.c |    5 -----
- drivers/net/wireless/ath/ath9k/main.c |    9 +++++++++
- 2 files changed, 9 insertions(+), 5 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/init.c
-+++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -626,8 +626,6 @@ err_queues:
- err_debug:
-       ath9k_hw_deinit(ah);
- err_hw:
--      tasklet_kill(&sc->intr_tq);
--      tasklet_kill(&sc->bcon_tasklet);
-       kfree(ah);
-       sc->sc_ah = NULL;
-@@ -787,9 +785,6 @@ static void ath9k_deinit_softc(struct at
-       ath9k_exit_debug(sc->sc_ah);
-       ath9k_hw_deinit(sc->sc_ah);
--      tasklet_kill(&sc->intr_tq);
--      tasklet_kill(&sc->bcon_tasklet);
--
-       kfree(sc->sc_ah);
-       sc->sc_ah = NULL;
- }
---- a/drivers/net/wireless/ath/ath9k/main.c
-+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1349,6 +1349,9 @@ static void ath9k_stop(struct ieee80211_
-                       ath9k_btcoex_timer_pause(sc);
-       }
-+      /* prevent tasklets to enable interrupts once we disable them */
-+      ah->imask &= ~ATH9K_INT_GLOBAL;
-+
-       /* make sure h/w will not generate any interrupt
-        * before setting the invalid flag. */
-       ath9k_hw_set_interrupts(ah, 0);
-@@ -1823,6 +1826,12 @@ static int ath9k_set_key(struct ieee8021
-               ret = -EINVAL;
-       }
-+      /* we can now sync irq and kill any running tasklets, since we already
-+       * disabled interrupts and not holding a spin lock */
-+      synchronize_irq(sc->irq);
-+      tasklet_kill(&sc->intr_tq);
-+      tasklet_kill(&sc->bcon_tasklet);
-+
-       ath9k_ps_restore(sc);
-       mutex_unlock(&sc->mutex);
diff --git a/queue-2.6.36/ext4-fix-memory-leak-in-ext4_free_branches.patch b/queue-2.6.36/ext4-fix-memory-leak-in-ext4_free_branches.patch
new file mode 100644 (file)
index 0000000..c74c014
--- /dev/null
@@ -0,0 +1,35 @@
+From 1c5b9e9065567876c2d4a7a16d78f0fed154a5bf Mon Sep 17 00:00:00 2001
+From: Theodore Ts'o <tytso@mit.edu>
+Date: Mon, 10 Jan 2011 12:51:28 -0500
+Subject: ext4: fix memory leak in ext4_free_branches
+
+From: Theodore Ts'o <tytso@mit.edu>
+
+commit 1c5b9e9065567876c2d4a7a16d78f0fed154a5bf upstream.
+
+Commit 40389687 moved a call to ext4_forget() out of
+ext4_free_branches and let ext4_free_blocks() handle calling
+bforget().  But that change unfortunately did not replace the call to
+ext4_forget() with brelse(), which was needed to drop the in-use count
+of the indirect block's buffer head, which lead to a memory leak when
+deleting files that used indirect blocks.  Fix this.
+
+Thanks to Hugh Dickins for pointing this out.
+
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/ext4/inode.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/fs/ext4/inode.c
++++ b/fs/ext4/inode.c
+@@ -4530,6 +4530,7 @@ static void ext4_free_branches(handle_t
+                                       (__le32 *) bh->b_data,
+                                       (__le32 *) bh->b_data + addr_per_block,
+                                       depth);
++                      brelse(bh);
+                       /*
+                        * Everything below this this pointer has been
diff --git a/queue-2.6.36/mm-fix-migration-hangs-on-anon_vma-lock.patch b/queue-2.6.36/mm-fix-migration-hangs-on-anon_vma-lock.patch
new file mode 100644 (file)
index 0000000..76b905e
--- /dev/null
@@ -0,0 +1,137 @@
+From 1ce82b69e96c838d007f316b8347b911fdfa9842 Mon Sep 17 00:00:00 2001
+From: Hugh Dickins <hughd@google.com>
+Date: Thu, 13 Jan 2011 15:47:30 -0800
+Subject: mm: fix migration hangs on anon_vma lock
+
+From: Hugh Dickins <hughd@google.com>
+
+commit 1ce82b69e96c838d007f316b8347b911fdfa9842 upstream.
+
+Increased usage of page migration in mmotm reveals that the anon_vma
+locking in unmap_and_move() has been deficient since 2.6.36 (or even
+earlier).  Review at the time of f18194275c39835cb84563500995e0d503a32d9a
+("mm: fix hang on anon_vma->root->lock") missed the issue here: the
+anon_vma to which we get a reference may already have been freed back to
+its slab (it is in use when we check page_mapped, but that can change),
+and so its anon_vma->root may be switched at any moment by reuse in
+anon_vma_prepare.
+
+Perhaps we could fix that with a get_anon_vma_unless_zero(), but let's
+not: just rely on page_lock_anon_vma() to do all the hard thinking for us,
+then we don't need any rcu read locking over here.
+
+In removing the rcu_unlock label: since PageAnon is a bit in
+page->mapping, it's impossible for a !page->mapping page to be anon; but
+insert VM_BUG_ON in case the implementation ever changes.
+
+[akpm@linux-foundation.org: coding-style fixes]
+Signed-off-by: Hugh Dickins <hughd@google.com>
+Reviewed-by: Mel Gorman <mel@csn.ul.ie>
+Reviewed-by: Rik van Riel <riel@redhat.com>
+Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
+Cc: "Jun'ichi Nomura" <j-nomura@ce.jp.nec.com>
+Cc: Andi Kleen <ak@linux.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>
+
+---
+ mm/migrate.c |   48 +++++++++++++++++++-----------------------------
+ 1 file changed, 19 insertions(+), 29 deletions(-)
+
+--- a/mm/migrate.c
++++ b/mm/migrate.c
+@@ -553,7 +553,6 @@ static int unmap_and_move(new_page_t get
+       int *result = NULL;
+       struct page *newpage = get_new_page(page, private, &result);
+       int remap_swapcache = 1;
+-      int rcu_locked = 0;
+       int charge = 0;
+       struct mem_cgroup *mem = NULL;
+       struct anon_vma *anon_vma = NULL;
+@@ -605,20 +604,26 @@ static int unmap_and_move(new_page_t get
+       /*
+        * By try_to_unmap(), page->mapcount goes down to 0 here. In this case,
+        * we cannot notice that anon_vma is freed while we migrates a page.
+-       * This rcu_read_lock() delays freeing anon_vma pointer until the end
++       * This get_anon_vma() delays freeing anon_vma pointer until the end
+        * of migration. File cache pages are no problem because of page_lock()
+        * File Caches may use write_page() or lock_page() in migration, then,
+        * just care Anon page here.
+        */
+       if (PageAnon(page)) {
+-              rcu_read_lock();
+-              rcu_locked = 1;
+-
+-              /* Determine how to safely use anon_vma */
+-              if (!page_mapped(page)) {
+-                      if (!PageSwapCache(page))
+-                              goto rcu_unlock;
+-
++              /*
++               * Only page_lock_anon_vma() understands the subtleties of
++               * getting a hold on an anon_vma from outside one of its mms.
++               */
++              anon_vma = page_lock_anon_vma(page);
++              if (anon_vma) {
++                      /*
++                       * Take a reference count on the anon_vma if the
++                       * page is mapped so that it is guaranteed to
++                       * exist when the page is remapped later
++                       */
++                      get_anon_vma(anon_vma);
++                      page_unlock_anon_vma(anon_vma);
++              } else if (PageSwapCache(page)) {
+                       /*
+                        * We cannot be sure that the anon_vma of an unmapped
+                        * swapcache page is safe to use because we don't
+@@ -633,13 +638,7 @@ static int unmap_and_move(new_page_t get
+                        */
+                       remap_swapcache = 0;
+               } else {
+-                      /*
+-                       * Take a reference count on the anon_vma if the
+-                       * page is mapped so that it is guaranteed to
+-                       * exist when the page is remapped later
+-                       */
+-                      anon_vma = page_anon_vma(page);
+-                      get_anon_vma(anon_vma);
++                      goto uncharge;
+               }
+       }
+@@ -656,16 +655,10 @@ static int unmap_and_move(new_page_t get
+        * free the metadata, so the page can be freed.
+        */
+       if (!page->mapping) {
+-              if (!PageAnon(page) && page_has_private(page)) {
+-                      /*
+-                       * Go direct to try_to_free_buffers() here because
+-                       * a) that's what try_to_release_page() would do anyway
+-                       * b) we may be under rcu_read_lock() here, so we can't
+-                       *    use GFP_KERNEL which is what try_to_release_page()
+-                       *    needs to be effective.
+-                       */
++              VM_BUG_ON(PageAnon(page));
++              if (page_has_private(page)) {
+                       try_to_free_buffers(page);
+-                      goto rcu_unlock;
++                      goto uncharge;
+               }
+               goto skip_unmap;
+       }
+@@ -679,14 +672,11 @@ skip_unmap:
+       if (rc && remap_swapcache)
+               remove_migration_ptes(page, page);
+-rcu_unlock:
+       /* Drop an anon_vma reference if we took one */
+       if (anon_vma)
+               drop_anon_vma(anon_vma);
+-      if (rcu_locked)
+-              rcu_read_unlock();
+ uncharge:
+       if (!charge)
+               mem_cgroup_end_migration(mem, page, newpage);
diff --git a/queue-2.6.36/nfs-fix-an-nfs-client-lockdep-issue.patch b/queue-2.6.36/nfs-fix-an-nfs-client-lockdep-issue.patch
new file mode 100644 (file)
index 0000000..53cbaaf
--- /dev/null
@@ -0,0 +1,43 @@
+From e00b8a24041f37e56b4b8415ce4eba1cbc238065 Mon Sep 17 00:00:00 2001
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+Date: Thu, 27 Jan 2011 14:55:39 -0500
+Subject: NFS: Fix an NFS client lockdep issue
+
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+
+commit e00b8a24041f37e56b4b8415ce4eba1cbc238065 upstream.
+
+There is no reason to be freeing the delegation cred in the rcu callback,
+and doing so is resulting in a lockdep complaint that rpc_credcache_lock
+is being called from both softirq and non-softirq contexts.
+
+Reported-by: Chuck Lever <chuck.lever@oracle.com>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/nfs/delegation.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/fs/nfs/delegation.c
++++ b/fs/nfs/delegation.c
+@@ -24,8 +24,6 @@
+ static void nfs_do_free_delegation(struct nfs_delegation *delegation)
+ {
+-      if (delegation->cred)
+-              put_rpccred(delegation->cred);
+       kfree(delegation);
+ }
+@@ -38,6 +36,10 @@ static void nfs_free_delegation_callback
+ static void nfs_free_delegation(struct nfs_delegation *delegation)
+ {
++      if (delegation->cred) {
++              put_rpccred(delegation->cred);
++              delegation->cred = NULL;
++      }
+       call_rcu(&delegation->rcu, nfs_free_delegation_callback);
+ }
diff --git a/queue-2.6.36/nfs-fix-kernel-bug-at-fs-aio.c-554.patch b/queue-2.6.36/nfs-fix-kernel-bug-at-fs-aio.c-554.patch
new file mode 100644 (file)
index 0000000..336a2f9
--- /dev/null
@@ -0,0 +1,103 @@
+From 839f7ad6932d95f4d5ae7267b95c574714ff3d5b Mon Sep 17 00:00:00 2001
+From: Chuck Lever <chuck.lever@oracle.com>
+Date: Fri, 21 Jan 2011 15:54:57 +0000
+Subject: NFS: Fix "kernel BUG at fs/aio.c:554!"
+
+From: Chuck Lever <chuck.lever@oracle.com>
+
+commit 839f7ad6932d95f4d5ae7267b95c574714ff3d5b upstream.
+
+Nick Piggin reports:
+
+> I'm getting use after frees in aio code in NFS
+>
+> [ 2703.396766] Call Trace:
+> [ 2703.396858]  [<ffffffff8100b057>] ? native_sched_clock+0x27/0x80
+> [ 2703.396959]  [<ffffffff8108509e>] ? put_lock_stats+0xe/0x40
+> [ 2703.397058]  [<ffffffff81088348>] ? lock_release_holdtime+0xa8/0x140
+> [ 2703.397159]  [<ffffffff8108a2a5>] lock_acquire+0x95/0x1b0
+> [ 2703.397260]  [<ffffffff811627db>] ? aio_put_req+0x2b/0x60
+> [ 2703.397361]  [<ffffffff81039701>] ? get_parent_ip+0x11/0x50
+> [ 2703.397464]  [<ffffffff81612a31>] _raw_spin_lock_irq+0x41/0x80
+> [ 2703.397564]  [<ffffffff811627db>] ? aio_put_req+0x2b/0x60
+> [ 2703.397662]  [<ffffffff811627db>] aio_put_req+0x2b/0x60
+> [ 2703.397761]  [<ffffffff811647fe>] do_io_submit+0x2be/0x7c0
+> [ 2703.397895]  [<ffffffff81164d0b>] sys_io_submit+0xb/0x10
+> [ 2703.397995]  [<ffffffff8100307b>] system_call_fastpath+0x16/0x1b
+>
+> Adding some tracing, it is due to nfs completing the request then
+> returning something other than -EIOCBQUEUED, so aio.c
+> also completes the request.
+
+To address this, prevent the NFS direct I/O engine from completing
+async iocbs when the forward path returns an error without starting
+any I/O.
+
+This fix appears to survive ^C during both "xfstest no. 208" and "fsx
+-Z."
+
+It's likely this bug has existed for a very long while, as we are seeing
+very similar symptoms in OEL 5.  Copying stable.
+
+Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/nfs/direct.c |   34 ++++++++++++++++++++--------------
+ 1 file changed, 20 insertions(+), 14 deletions(-)
+
+--- a/fs/nfs/direct.c
++++ b/fs/nfs/direct.c
+@@ -407,15 +407,18 @@ static ssize_t nfs_direct_read_schedule_
+               pos += vec->iov_len;
+       }
++      /*
++       * If no bytes were started, return the error, and let the
++       * generic layer handle the completion.
++       */
++      if (requested_bytes == 0) {
++              nfs_direct_req_release(dreq);
++              return result < 0 ? result : -EIO;
++      }
++
+       if (put_dreq(dreq))
+               nfs_direct_complete(dreq);
+-
+-      if (requested_bytes != 0)
+-              return 0;
+-
+-      if (result < 0)
+-              return result;
+-      return -EIO;
++      return 0;
+ }
+ static ssize_t nfs_direct_read(struct kiocb *iocb, const struct iovec *iov,
+@@ -841,15 +844,18 @@ static ssize_t nfs_direct_write_schedule
+               pos += vec->iov_len;
+       }
++      /*
++       * If no bytes were started, return the error, and let the
++       * generic layer handle the completion.
++       */
++      if (requested_bytes == 0) {
++              nfs_direct_req_release(dreq);
++              return result < 0 ? result : -EIO;
++      }
++
+       if (put_dreq(dreq))
+               nfs_direct_write_complete(dreq, dreq->inode);
+-
+-      if (requested_bytes != 0)
+-              return 0;
+-
+-      if (result < 0)
+-              return result;
+-      return -EIO;
++      return 0;
+ }
+ static ssize_t nfs_direct_write(struct kiocb *iocb, const struct iovec *iov,
diff --git a/queue-2.6.36/proc-kcore-fix-seeking.patch b/queue-2.6.36/proc-kcore-fix-seeking.patch
new file mode 100644 (file)
index 0000000..7dfe6ab
--- /dev/null
@@ -0,0 +1,41 @@
+From ceff1a770933e2ca2bf995b453dade4ec47a9878 Mon Sep 17 00:00:00 2001
+From: Dave Anderson <anderson@redhat.com>
+Date: Wed, 12 Jan 2011 17:00:36 -0800
+Subject: /proc/kcore: fix seeking
+
+From: Dave Anderson <anderson@redhat.com>
+
+commit ceff1a770933e2ca2bf995b453dade4ec47a9878 upstream.
+
+Commit 34aacb2920 ("procfs: Use generic_file_llseek in /proc/kcore") broke
+seeking on /proc/kcore.  This changes it back to use default_llseek in
+order to restore the original behavior.
+
+The problem with generic_file_llseek is that it only allows seeks up to
+inode->i_sb->s_maxbytes, which is 2GB-1 on procfs, where the memory file
+offset values in the /proc/kcore PT_LOAD segments may exceed or start
+beyond that offset value.
+
+A similar revert was made for /proc/vmcore.
+
+Signed-off-by: Dave Anderson <anderson@redhat.com>
+Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/proc/kcore.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/proc/kcore.c
++++ b/fs/proc/kcore.c
+@@ -558,7 +558,7 @@ static int open_kcore(struct inode *inod
+ static const struct file_operations proc_kcore_operations = {
+       .read           = read_kcore,
+       .open           = open_kcore,
+-      .llseek         = generic_file_llseek,
++      .llseek         = default_llseek,
+ };
+ #ifdef CONFIG_MEMORY_HOTPLUG
diff --git a/queue-2.6.36/rdma-cxgb4-set-the-correct-device-physical-function-for-iwarp-connections.patch b/queue-2.6.36/rdma-cxgb4-set-the-correct-device-physical-function-for-iwarp-connections.patch
new file mode 100644 (file)
index 0000000..8a3a257
--- /dev/null
@@ -0,0 +1,30 @@
+From 94788657c94169171971968c9d4b6222c5e704aa Mon Sep 17 00:00:00 2001
+From: Steve Wise <swise@opengridcomputing.com>
+Date: Fri, 21 Jan 2011 17:00:34 +0000
+Subject: RDMA/cxgb4: Set the correct device physical function for iWARP connections
+
+From: Steve Wise <swise@opengridcomputing.com>
+
+commit 94788657c94169171971968c9d4b6222c5e704aa upstream.
+
+The PF passed to FW was 0, causing PCI failures in an SR-IOV environment.
+
+Signed-off-by: Steve Wise <swise@opengridcomputing.com>
+Signed-off-by: Roland Dreier <roland@purestorage.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/infiniband/hw/cxgb4/cm.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/infiniband/hw/cxgb4/cm.c
++++ b/drivers/infiniband/hw/cxgb4/cm.c
+@@ -383,7 +383,7 @@ static void send_flowc(struct c4iw_ep *e
+                                         16)) | FW_WR_FLOWID(ep->hwtid));
+       flowc->mnemval[0].mnemonic = FW_FLOWC_MNEM_PFNVFN;
+-      flowc->mnemval[0].val = cpu_to_be32(0);
++      flowc->mnemval[0].val = cpu_to_be32(PCI_FUNC(ep->com.dev->rdev.lldi.pdev->devfn) << 8);
+       flowc->mnemval[1].mnemonic = FW_FLOWC_MNEM_CH;
+       flowc->mnemval[1].val = cpu_to_be32(ep->tx_chan);
+       flowc->mnemval[2].mnemonic = FW_FLOWC_MNEM_PORT;
diff --git a/queue-2.6.36/rtc-cmos-fix-suspend-resume.patch b/queue-2.6.36/rtc-cmos-fix-suspend-resume.patch
new file mode 100644 (file)
index 0000000..af36e29
--- /dev/null
@@ -0,0 +1,97 @@
+From 2fb08e6ca9f00d1aedb3964983e9c8f84b36b807 Mon Sep 17 00:00:00 2001
+From: Paul Fox <pgf@laptop.org>
+Date: Wed, 12 Jan 2011 17:00:07 -0800
+Subject: rtc-cmos: fix suspend/resume
+
+From: Paul Fox <pgf@laptop.org>
+
+commit 2fb08e6ca9f00d1aedb3964983e9c8f84b36b807 upstream.
+
+rtc-cmos was setting suspend/resume hooks at the device_driver level.
+However, the platform bus code (drivers/base/platform.c) only looks for
+resume hooks at the dev_pm_ops level, or within the platform_driver.
+
+Switch rtc_cmos to use dev_pm_ops so that suspend/resume code is executed
+again.
+
+Paul said:
+
+: The user visible symptom in our (XO laptop) case was that rtcwake would
+: fail to wake the laptop.  The RTC alarm would expire, but the wakeup
+: wasn't unmasked.
+:
+: As for severity, the impact may have been reduced because if I recall
+: correctly, the bug only affected platforms with CONFIG_PNP disabled.
+
+Signed-off-by: Paul Fox <pgf@laptop.org>
+Signed-off-by: Daniel Drake <dsd@laptop.org>
+Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/rtc/rtc-cmos.c |   16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
+
+--- a/drivers/rtc/rtc-cmos.c
++++ b/drivers/rtc/rtc-cmos.c
+@@ -36,6 +36,7 @@
+ #include <linux/platform_device.h>
+ #include <linux/mod_devicetable.h>
+ #include <linux/log2.h>
++#include <linux/pm.h>
+ /* this is for "generic access to PC-style RTC" using CMOS_READ/CMOS_WRITE */
+ #include <asm-generic/rtc.h>
+@@ -850,7 +851,7 @@ static void __exit cmos_do_remove(struct
+ #ifdef        CONFIG_PM
+-static int cmos_suspend(struct device *dev, pm_message_t mesg)
++static int cmos_suspend(struct device *dev)
+ {
+       struct cmos_rtc *cmos = dev_get_drvdata(dev);
+       unsigned char   tmp;
+@@ -898,7 +899,7 @@ static int cmos_suspend(struct device *d
+  */
+ static inline int cmos_poweroff(struct device *dev)
+ {
+-      return cmos_suspend(dev, PMSG_HIBERNATE);
++      return cmos_suspend(dev);
+ }
+ static int cmos_resume(struct device *dev)
+@@ -945,9 +946,9 @@ static int cmos_resume(struct device *de
+       return 0;
+ }
++static SIMPLE_DEV_PM_OPS(cmos_pm_ops, cmos_suspend, cmos_resume);
++
+ #else
+-#define       cmos_suspend    NULL
+-#define       cmos_resume     NULL
+ static inline int cmos_poweroff(struct device *dev)
+ {
+@@ -1077,7 +1078,7 @@ static void __exit cmos_pnp_remove(struc
+ static int cmos_pnp_suspend(struct pnp_dev *pnp, pm_message_t mesg)
+ {
+-      return cmos_suspend(&pnp->dev, mesg);
++      return cmos_suspend(&pnp->dev);
+ }
+ static int cmos_pnp_resume(struct pnp_dev *pnp)
+@@ -1157,8 +1158,9 @@ static struct platform_driver cmos_platf
+       .shutdown       = cmos_platform_shutdown,
+       .driver = {
+               .name           = (char *) driver_name,
+-              .suspend        = cmos_suspend,
+-              .resume         = cmos_resume,
++#ifdef CONFIG_PM
++              .pm             = &cmos_pm_ops,
++#endif
+       }
+ };
index 4445a7d2289b92f0693514559ca325dd9b0e849c..31d3d9cf1724fee32015b8d75a37cc986abfc3d2 100644 (file)
@@ -59,7 +59,6 @@ ath9k-fix-beacon-restart-on-channel-change.patch
 ath9k_hw-do-pa-offset-calibration-only-on-longcal-interval.patch
 ath9k_hw-disabled-paprd-for-ar9003.patch
 ath9k_hw-fix-system-hang-when-resuming-from-s3-s4.patch
-ath9k-fix-race-conditions-when-stop-device.patch
 qdio-use-proper-qebsm-operand-for-siga-r-and-siga-s.patch
 fix-medium-error-problems-with-some-arrays-which-can-cause-data-corruption.patch
 libsas-fix-runaway-error-handler-problem.patch
@@ -88,3 +87,10 @@ asoc-when-disabling-wm8994-fll-force-a-source-selection.patch
 asoc-wm8990-msleep-takes-milliseconds-not-jiffies.patch
 asoc-blackfin-ac97-fix-build-error-after-multi-component-update.patch
 asoc-blackfin-tdm-fix-missed-snd_soc_dai_get_drvdata-update.patch
+nfs-fix-an-nfs-client-lockdep-issue.patch
+nfs-fix-kernel-bug-at-fs-aio.c-554.patch
+rdma-cxgb4-set-the-correct-device-physical-function-for-iwarp-connections.patch
+proc-kcore-fix-seeking.patch
+rtc-cmos-fix-suspend-resume.patch
+mm-fix-migration-hangs-on-anon_vma-lock.patch
+ext4-fix-memory-leak-in-ext4_free_branches.patch