From: Greg Kroah-Hartman Date: Tue, 19 May 2020 10:54:11 +0000 (+0200) Subject: 4.4-stable patches X-Git-Tag: v4.4.224~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f17ea2b0ade1075da378c9118f7aadff5faa1363;p=thirdparty%2Fkernel%2Fstable-queue.git 4.4-stable patches added patches: scsi-iscsi-fix-a-potential-deadlock-in-the-timeout-handler.patch --- 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 index 8b4ad316886..00000000000 --- a/queue-4.4/phy-micrel-disable-auto-negotiation-on-startup.patch +++ /dev/null @@ -1,58 +0,0 @@ -From c19c2ad01c9ed92507f536b2c63f7eb755cb277a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 26 Feb 2016 19:18:23 +0100 -Subject: phy: micrel: Disable auto negotiation on startup - -From: Alexandre Belloni - -[ 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 -Signed-off-by: David S. Miller -Signed-off-by: Sasha Levin ---- - 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 index 00000000000..bbc3b35158d --- /dev/null +++ b/queue-4.4/scsi-iscsi-fix-a-potential-deadlock-in-the-timeout-handler.patch @@ -0,0 +1,120 @@ +From 5480e299b5ae57956af01d4839c9fc88a465eeab Mon Sep 17 00:00:00 2001 +From: Bart Van Assche +Date: Mon, 9 Dec 2019 09:34:57 -0800 +Subject: scsi: iscsi: Fix a potential deadlock in the timeout handler + +From: Bart Van Assche + +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): [] _raw_spin_unlock_irq+0x2c/0x50 +hardirqs last disabled at (1383704): [] _raw_spin_lock_irq+0x18/0x50 +softirqs last enabled at (1383690): [] iscsi_queuecommand+0x76a/0xa20 [libiscsi] +softirqs last disabled at (1383682): [] iscsi_queuecommand+0x118/0xa20 [libiscsi] + +other info that might help us debug this: + Possible unsafe locking scenario: + + CPU0 + ---- + lock(&(&session->frwd_lock)->rlock); + + 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 +Cc: Keith Busch +Cc: Lee Duncan +Cc: Chris Leech +Cc: +Link: https://lore.kernel.org/r/20191209173457.187370-1-bvanassche@acm.org +Signed-off-by: Bart Van Assche +Reviewed-by: Lee Duncan +Signed-off-by: Martin K. Petersen +Cc: Henri Rosten +Signed-off-by: Greg Kroah-Hartman + +--- + 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; diff --git a/queue-4.4/series b/queue-4.4/series index 09bb047fbf1..57a08e3aa0a 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -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