]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.0-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 16 May 2013 22:15:19 +0000 (18:15 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 16 May 2013 22:15:19 +0000 (18:15 -0400)
added patches:
drbd-fix-for-deadlock-when-using-automatic-split-brain-recovery.patch
drivers-rtc-rtc-pcf2123.c-fix-error-return-code-in-pcf2123_probe.patch
pch_dma-use-gfp_atomic-because-called-from-interrupt-context.patch
r8169-fix-vlan-tag-read-ordering.patch

queue-3.0/drbd-fix-for-deadlock-when-using-automatic-split-brain-recovery.patch [new file with mode: 0644]
queue-3.0/drivers-rtc-rtc-pcf2123.c-fix-error-return-code-in-pcf2123_probe.patch [new file with mode: 0644]
queue-3.0/pch_dma-use-gfp_atomic-because-called-from-interrupt-context.patch [new file with mode: 0644]
queue-3.0/r8169-fix-vlan-tag-read-ordering.patch [new file with mode: 0644]
queue-3.0/series

diff --git a/queue-3.0/drbd-fix-for-deadlock-when-using-automatic-split-brain-recovery.patch b/queue-3.0/drbd-fix-for-deadlock-when-using-automatic-split-brain-recovery.patch
new file mode 100644 (file)
index 0000000..eaaa62a
--- /dev/null
@@ -0,0 +1,41 @@
+From 7c689e63a847316c1b2500f86891b0a574ce7e69 Mon Sep 17 00:00:00 2001
+From: Philipp Reisner <philipp.reisner@linbit.com>
+Date: Wed, 27 Mar 2013 14:08:47 +0100
+Subject: drbd: fix for deadlock when using automatic split-brain-recovery
+
+From: Philipp Reisner <philipp.reisner@linbit.com>
+
+commit 7c689e63a847316c1b2500f86891b0a574ce7e69 upstream.
+
+With an automatic after split-brain recovery policy of
+"after-sb-1pri call-pri-lost-after-sb",
+when trying to drbd_set_role() to R_SECONDARY,
+we run into a deadlock.
+
+This was first recognized and supposedly fixed by
+2009-06-10 "Fixed a deadlock when using automatic split brain recovery when both nodes are"
+replacing drbd_set_role() with drbd_change_state() in that code-path,
+but the first hunk of that patch forgets to remove the drbd_set_role().
+
+We apparently only ever tested the "two primaries" case.
+
+Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
+Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Jonghwan Choi <jhbird.choi@samsung.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/block/drbd/drbd_receiver.c |    1 -
+ 1 file changed, 1 deletion(-)
+
+--- a/drivers/block/drbd/drbd_receiver.c
++++ b/drivers/block/drbd/drbd_receiver.c
+@@ -2225,7 +2225,6 @@ static int drbd_asb_recover_1p(struct dr
+               if (hg == -1 && mdev->state.role == R_PRIMARY) {
+                       enum drbd_state_rv rv2;
+-                      drbd_set_role(mdev, R_SECONDARY, 0);
+                        /* drbd_change_state() does not sleep while in SS_IN_TRANSIENT_STATE,
+                         * we might be here in C_WF_REPORT_PARAMS which is transient.
+                         * we do not need to wait for the after state change work either. */
diff --git a/queue-3.0/drivers-rtc-rtc-pcf2123.c-fix-error-return-code-in-pcf2123_probe.patch b/queue-3.0/drivers-rtc-rtc-pcf2123.c-fix-error-return-code-in-pcf2123_probe.patch
new file mode 100644 (file)
index 0000000..6977838
--- /dev/null
@@ -0,0 +1,33 @@
+From 35623715818dfa720cccf99cd280dcbb4b78da23 Mon Sep 17 00:00:00 2001
+From: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
+Date: Mon, 29 Apr 2013 16:21:07 -0700
+Subject: drivers/rtc/rtc-pcf2123.c: fix error return code in pcf2123_probe()
+
+From: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
+
+commit 35623715818dfa720cccf99cd280dcbb4b78da23 upstream.
+
+Fix to return -ENODEV in the chip not found error handling
+case instead of 0, as done elsewhere in this function.
+
+Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
+Cc: Jingoo Han <jg1.han@samsung.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Jonghwan Choi <jhbird.choi@samsung.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/rtc/rtc-pcf2123.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/rtc/rtc-pcf2123.c
++++ b/drivers/rtc/rtc-pcf2123.c
+@@ -263,6 +263,7 @@ static int __devinit pcf2123_probe(struc
+       if (!(rxbuf[0] & 0x20)) {
+               dev_err(&spi->dev, "chip not found\n");
++              ret = -ENODEV;
+               goto kfree_exit;
+       }
diff --git a/queue-3.0/pch_dma-use-gfp_atomic-because-called-from-interrupt-context.patch b/queue-3.0/pch_dma-use-gfp_atomic-because-called-from-interrupt-context.patch
new file mode 100644 (file)
index 0000000..e21e765
--- /dev/null
@@ -0,0 +1,33 @@
+From 5c1ef59168c485318e40ba485c1eba57d81d0faa Mon Sep 17 00:00:00 2001
+From: Tomoya MORINAGA <tomoya.rohm@gmail.com>
+Date: Tue, 12 Feb 2013 11:25:33 +0900
+Subject: pch_dma: Use GFP_ATOMIC because called from interrupt context
+
+From: Tomoya MORINAGA <tomoya.rohm@gmail.com>
+
+commit 5c1ef59168c485318e40ba485c1eba57d81d0faa upstream.
+
+pdc_desc_get() is called from pd_prep_slave_sg, and the function is
+called from interrupt context(e.g. Uart driver "pch_uart.c").
+In fact, I saw kernel error message.
+So, GFP_ATOMIC must be used not GFP_NOIO.
+
+Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com>
+Signed-off-by: Vinod Koul <vinod.koul@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/dma/pch_dma.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/dma/pch_dma.c
++++ b/drivers/dma/pch_dma.c
+@@ -489,7 +489,7 @@ static struct pch_dma_desc *pdc_desc_get
+       dev_dbg(chan2dev(&pd_chan->chan), "scanned %d descriptors\n", i);
+       if (!ret) {
+-              ret = pdc_alloc_desc(&pd_chan->chan, GFP_NOIO);
++              ret = pdc_alloc_desc(&pd_chan->chan, GFP_ATOMIC);
+               if (ret) {
+                       spin_lock(&pd_chan->lock);
+                       pd_chan->descs_allocated++;
diff --git a/queue-3.0/r8169-fix-vlan-tag-read-ordering.patch b/queue-3.0/r8169-fix-vlan-tag-read-ordering.patch
new file mode 100644 (file)
index 0000000..795a0fd
--- /dev/null
@@ -0,0 +1,77 @@
+From romieu@fr.zoreil.com  Thu May 16 18:08:15 2013
+From: Francois Romieu <romieu@fr.zoreil.com>
+Date: Fri, 10 May 2013 00:50:20 +0200
+Subject: r8169: fix vlan tag read ordering.
+To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Cc: stable@vger.kernel.org, Hayes Wang <hayeswang@realtek.com>, "David S. Miller" <davem@davemloft.net>, Timo Teras <timo.teras@iki.fi>
+Message-ID: <20130509225020.GA28258@electric-eye.fr.zoreil.com>
+Content-Disposition: inline
+
+From: Francois Romieu <romieu@fr.zoreil.com>
+
+commit ce11ff5e5963e441feb591e76278528f876c332d upstream.
+
+Control of receive descriptor must not be returned to ethernet chipset
+before vlan tag processing is done.
+
+VLAN tag receive word is now reset both in normal and error path.
+
+Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
+Spotted-by: Timo Teras <timo.teras@iki.fi>
+Cc: Hayes Wang <hayeswang@realtek.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/r8169.c |   13 ++++++-------
+ 1 file changed, 6 insertions(+), 7 deletions(-)
+
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -1494,8 +1494,6 @@ static void rtl8169_rx_vlan_tag(struct R
+       if (opts2 & RxVlanTag)
+               __vlan_hwaccel_put_tag(skb, swab16(opts2 & 0xffff));
+-
+-      desc->opts2 = 0;
+ }
+ static int rtl8169_gset_tbi(struct net_device *dev, struct ethtool_cmd *cmd)
+@@ -5188,7 +5186,6 @@ static int rtl8169_rx_interrupt(struct n
+                               rtl8169_schedule_work(dev, rtl8169_reset_task);
+                               dev->stats.rx_fifo_errors++;
+                       }
+-                      rtl8169_mark_to_asic(desc, rx_buf_sz);
+               } else {
+                       struct sk_buff *skb;
+                       dma_addr_t addr = le64_to_cpu(desc->addr);
+@@ -5202,16 +5199,14 @@ static int rtl8169_rx_interrupt(struct n
+                       if (unlikely(rtl8169_fragmented_frame(status))) {
+                               dev->stats.rx_dropped++;
+                               dev->stats.rx_length_errors++;
+-                              rtl8169_mark_to_asic(desc, rx_buf_sz);
+-                              continue;
++                              goto release_descriptor;
+                       }
+                       skb = rtl8169_try_rx_copy(tp->Rx_databuff[entry],
+                                                 tp, pkt_size, addr);
+-                      rtl8169_mark_to_asic(desc, rx_buf_sz);
+                       if (!skb) {
+                               dev->stats.rx_dropped++;
+-                              continue;
++                              goto release_descriptor;
+                       }
+                       rtl8169_rx_csum(skb, status);
+@@ -5225,6 +5220,10 @@ static int rtl8169_rx_interrupt(struct n
+                       dev->stats.rx_bytes += pkt_size;
+                       dev->stats.rx_packets++;
+               }
++release_descriptor:
++              desc->opts2 = 0;
++              wmb();
++              rtl8169_mark_to_asic(desc, rx_buf_sz);
+       }
+       count = cur_rx - tp->cur_rx;
index 75da0956f2b9c6c973931626c2292e1f4abf1797..87f16551e1fe928b848d7e7ea314a4d8176a0cf0 100644 (file)
@@ -24,3 +24,7 @@ if_cablemodem.h-add-parenthesis-around-ioctl-macros.patch
 macvlan-fix-passthru-mode-race-between-dev-removal-and-rx-path.patch
 ipv6-do-not-clear-pinet6-field.patch
 xfrm6-release-dev-before-returning-error.patch
+pch_dma-use-gfp_atomic-because-called-from-interrupt-context.patch
+r8169-fix-vlan-tag-read-ordering.patch
+drbd-fix-for-deadlock-when-using-automatic-split-brain-recovery.patch
+drivers-rtc-rtc-pcf2123.c-fix-error-return-code-in-pcf2123_probe.patch