]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 19 May 2020 10:54:11 +0000 (12:54 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 19 May 2020 10:54:11 +0000 (12:54 +0200)
added patches:
scsi-iscsi-fix-a-potential-deadlock-in-the-timeout-handler.patch

queue-4.4/phy-micrel-disable-auto-negotiation-on-startup.patch [deleted file]
queue-4.4/scsi-iscsi-fix-a-potential-deadlock-in-the-timeout-handler.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/phy-micrel-disable-auto-negotiation-on-startup.patch b/queue-4.4/phy-micrel-disable-auto-negotiation-on-startup.patch
deleted file mode 100644 (file)
index 8b4ad31..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-From c19c2ad01c9ed92507f536b2c63f7eb755cb277a Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 26 Feb 2016 19:18:23 +0100
-Subject: phy: micrel: Disable auto negotiation on startup
-
-From: Alexandre Belloni <alexandre.belloni@free-electrons.com>
-
-[ Upstream commit 99f81afc139c6edd14d77a91ee91685a414a1c66 ]
-
-Disable auto negotiation on init to properly detect an already plugged
-cable at boot.
-
-At boot, when the phy is started, it is in the PHY_UP state.
-However, if a cable is plugged at boot, because auto negociation is already
-enabled at the time we get the first interrupt, the phy is already running.
-But the state machine then switches from PHY_UP to PHY_AN and calls
-phy_start_aneg(). phy_start_aneg() will not do anything because aneg is
-already enabled on the phy. It will then wait for a interrupt before going
-further. This interrupt will never happen unless the cable is unplugged and
-then replugged.
-
-It was working properly before 321beec5047a (net: phy: Use interrupts when
-available in NOLINK state) because switching to NOLINK meant starting
-polling the phy, even if IRQ were enabled.
-
-Fixes: 321beec5047a (net: phy: Use interrupts when available in NOLINK state)
-Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/phy/micrel.c | 11 +++++++++++
- 1 file changed, 11 insertions(+)
-
-diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
-index 4eba646789c30..98166e144f2dd 100644
---- a/drivers/net/phy/micrel.c
-+++ b/drivers/net/phy/micrel.c
-@@ -285,6 +285,17 @@ static int kszphy_config_init(struct phy_device *phydev)
-       if (priv->led_mode >= 0)
-               kszphy_setup_led(phydev, type->led_mode_reg, priv->led_mode);
-+      if (phy_interrupt_is_valid(phydev)) {
-+              int ctl = phy_read(phydev, MII_BMCR);
-+
-+              if (ctl < 0)
-+                      return ctl;
-+
-+              ret = phy_write(phydev, MII_BMCR, ctl & ~BMCR_ANENABLE);
-+              if (ret < 0)
-+                      return ret;
-+      }
-+
-       return 0;
- }
--- 
-2.20.1
-
diff --git a/queue-4.4/scsi-iscsi-fix-a-potential-deadlock-in-the-timeout-handler.patch b/queue-4.4/scsi-iscsi-fix-a-potential-deadlock-in-the-timeout-handler.patch
new file mode 100644 (file)
index 0000000..bbc3b35
--- /dev/null
@@ -0,0 +1,120 @@
+From 5480e299b5ae57956af01d4839c9fc88a465eeab Mon Sep 17 00:00:00 2001
+From: Bart Van Assche <bvanassche@acm.org>
+Date: Mon, 9 Dec 2019 09:34:57 -0800
+Subject: scsi: iscsi: Fix a potential deadlock in the timeout handler
+
+From: Bart Van Assche <bvanassche@acm.org>
+
+commit 5480e299b5ae57956af01d4839c9fc88a465eeab upstream.
+
+Some time ago the block layer was modified such that timeout handlers are
+called from thread context instead of interrupt context. Make it safe to
+run the iSCSI timeout handler in thread context. This patch fixes the
+following lockdep complaint:
+
+================================
+WARNING: inconsistent lock state
+5.5.1-dbg+ #11 Not tainted
+--------------------------------
+inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
+kworker/7:1H/206 [HC0[0]:SC0[0]:HE1:SE1] takes:
+ffff88802d9827e8 (&(&session->frwd_lock)->rlock){+.?.}, at: iscsi_eh_cmd_timed_out+0xa6/0x6d0 [libiscsi]
+{IN-SOFTIRQ-W} state was registered at:
+  lock_acquire+0x106/0x240
+  _raw_spin_lock+0x38/0x50
+  iscsi_check_transport_timeouts+0x3e/0x210 [libiscsi]
+  call_timer_fn+0x132/0x470
+  __run_timers.part.0+0x39f/0x5b0
+  run_timer_softirq+0x63/0xc0
+  __do_softirq+0x12d/0x5fd
+  irq_exit+0xb3/0x110
+  smp_apic_timer_interrupt+0x131/0x3d0
+  apic_timer_interrupt+0xf/0x20
+  default_idle+0x31/0x230
+  arch_cpu_idle+0x13/0x20
+  default_idle_call+0x53/0x60
+  do_idle+0x38a/0x3f0
+  cpu_startup_entry+0x24/0x30
+  start_secondary+0x222/0x290
+  secondary_startup_64+0xa4/0xb0
+irq event stamp: 1383705
+hardirqs last  enabled at (1383705): [<ffffffff81aace5c>] _raw_spin_unlock_irq+0x2c/0x50
+hardirqs last disabled at (1383704): [<ffffffff81aacb98>] _raw_spin_lock_irq+0x18/0x50
+softirqs last  enabled at (1383690): [<ffffffffa0e2efea>] iscsi_queuecommand+0x76a/0xa20 [libiscsi]
+softirqs last disabled at (1383682): [<ffffffffa0e2e998>] iscsi_queuecommand+0x118/0xa20 [libiscsi]
+
+other info that might help us debug this:
+ Possible unsafe locking scenario:
+
+       CPU0
+       ----
+  lock(&(&session->frwd_lock)->rlock);
+  <Interrupt>
+    lock(&(&session->frwd_lock)->rlock);
+
+ *** DEADLOCK ***
+
+2 locks held by kworker/7:1H/206:
+ #0: ffff8880d57bf928 ((wq_completion)kblockd){+.+.}, at: process_one_work+0x472/0xab0
+ #1: ffff88802b9c7de8 ((work_completion)(&q->timeout_work)){+.+.}, at: process_one_work+0x476/0xab0
+
+stack backtrace:
+CPU: 7 PID: 206 Comm: kworker/7:1H Not tainted 5.5.1-dbg+ #11
+Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
+Workqueue: kblockd blk_mq_timeout_work
+Call Trace:
+ dump_stack+0xa5/0xe6
+ print_usage_bug.cold+0x232/0x23b
+ mark_lock+0x8dc/0xa70
+ __lock_acquire+0xcea/0x2af0
+ lock_acquire+0x106/0x240
+ _raw_spin_lock+0x38/0x50
+ iscsi_eh_cmd_timed_out+0xa6/0x6d0 [libiscsi]
+ scsi_times_out+0xf4/0x440 [scsi_mod]
+ scsi_timeout+0x1d/0x20 [scsi_mod]
+ blk_mq_check_expired+0x365/0x3a0
+ bt_iter+0xd6/0xf0
+ blk_mq_queue_tag_busy_iter+0x3de/0x650
+ blk_mq_timeout_work+0x1af/0x380
+ process_one_work+0x56d/0xab0
+ worker_thread+0x7a/0x5d0
+ kthread+0x1bc/0x210
+ ret_from_fork+0x24/0x30
+
+Fixes: 287922eb0b18 ("block: defer timeouts to a workqueue")
+Cc: Christoph Hellwig <hch@lst.de>
+Cc: Keith Busch <keith.busch@intel.com>
+Cc: Lee Duncan <lduncan@suse.com>
+Cc: Chris Leech <cleech@redhat.com>
+Cc: <stable@vger.kernel.org>
+Link: https://lore.kernel.org/r/20191209173457.187370-1-bvanassche@acm.org
+Signed-off-by: Bart Van Assche <bvanassche@acm.org>
+Reviewed-by: Lee Duncan <lduncan@suse.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Cc: Henri Rosten <henri.rosten@unikie.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/scsi/libiscsi.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/scsi/libiscsi.c
++++ b/drivers/scsi/libiscsi.c
+@@ -1982,7 +1982,7 @@ static enum blk_eh_timer_return iscsi_eh
+       ISCSI_DBG_EH(session, "scsi cmd %p timedout\n", sc);
+-      spin_lock(&session->frwd_lock);
++      spin_lock_bh(&session->frwd_lock);
+       task = (struct iscsi_task *)sc->SCp.ptr;
+       if (!task) {
+               /*
+@@ -2109,7 +2109,7 @@ static enum blk_eh_timer_return iscsi_eh
+ done:
+       if (task)
+               task->last_timeout = jiffies;
+-      spin_unlock(&session->frwd_lock);
++      spin_unlock_bh(&session->frwd_lock);
+       ISCSI_DBG_EH(session, "return %s\n", rc == BLK_EH_RESET_TIMER ?
+                    "timer reset" : "shutdown or nh");
+       return rc;
index 09bb047fbf197a8410e9c9040d88b0e1976782d5..57a08e3aa0a750823d1218802a8adb890a39b174 100644 (file)
@@ -14,7 +14,6 @@ usb-uas-add-quirk-for-lacie-2big-quadra.patch
 usb-serial-garmin_gps-add-sanity-checking-for-data-length.patch
 batman-adv-fix-batadv_nc_random_weight_tq.patch
 scripts-decodecode-fix-trapping-instruction-formatting.patch
-phy-micrel-disable-auto-negotiation-on-startup.patch
 phy-micrel-ensure-interrupts-are-reenabled-on-resume.patch
 binfmt_elf-do-not-move-brk-for-interp-less-et_exec.patch
 ext4-add-cond_resched-to-ext4_protect_reserved_inode.patch
@@ -84,3 +83,4 @@ revert-alsa-hda-realtek-fix-pop-noise-on-alc225.patch
 arm-dts-r8a7740-add-missing-extal2-to-cpg-node.patch
 kvm-x86-fix-off-by-one-error-in-kvm_vcpu_ioctl_x86_setup_mce.patch
 makefile-disallow-data-races-on-gcc-10-as-well.patch
+scsi-iscsi-fix-a-potential-deadlock-in-the-timeout-handler.patch