Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1564659 > unrolled thread

[PATCH v2 1/3] btmrvl: avoid double-disable_irq() race

Started byJeffy Chen <jeffy.chen@rock-chips.com>
First post2017-01-23 05:20 +0100
Last post2017-01-23 05:30 +0100
Articles 2 — 1 participant

Back to article view | Back to linux.kernel


Contents

  [PATCH v2 1/3] btmrvl: avoid double-disable_irq() race Jeffy Chen <jeffy.chen@rock-chips.com> - 2017-01-23 05:20 +0100
    [PATCH v2 3/3] btmrvl: use dt's irqflags for wakeup pin Jeffy Chen <jeffy.chen@rock-chips.com> - 2017-01-23 05:30 +0100

#1564659 — [PATCH v2 1/3] btmrvl: avoid double-disable_irq() race

FromJeffy Chen <jeffy.chen@rock-chips.com>
Date2017-01-23 05:20 +0100
Subject[PATCH v2 1/3] btmrvl: avoid double-disable_irq() race
Message-ID<t2EgO-1Ep-3@gated-at.bofh.it>
It's much the same as what we did for mwifiex in:
b9da4d2 mwifiex: avoid double-disable_irq() race

"We have a race where the wakeup IRQ might be in flight while we're
calling mwifiex_disable_wake() from resume(). This can leave us
disabling the IRQ twice.

Let's disable the IRQ and enable it in case if we have double-disabled
it."

Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
Reviewed-by: Brian Norris <briannorris@chromium.org>
---

Changes in v2:
Update commit message.

 drivers/bluetooth/btmrvl_sdio.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
index d02f2c1..c738bae 100644
--- a/drivers/bluetooth/btmrvl_sdio.c
+++ b/drivers/bluetooth/btmrvl_sdio.c
@@ -1682,8 +1682,12 @@ static int btmrvl_sdio_resume(struct device *dev)
 	/* Disable platform specific wakeup interrupt */
 	if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0) {
 		disable_irq_wake(card->plt_wake_cfg->irq_bt);
-		if (!card->plt_wake_cfg->wake_by_bt)
-			disable_irq(card->plt_wake_cfg->irq_bt);
+		disable_irq(card->plt_wake_cfg->irq_bt);
+		if (card->plt_wake_cfg->wake_by_bt)
+			/* Undo our disable, since interrupt handler already
+			 * did this.
+			 */
+			enable_irq(card->plt_wake_cfg->irq_bt);
 	}
 
 	return 0;
-- 
2.1.4

[toc] | [next] | [standalone]


#1564661 — [PATCH v2 3/3] btmrvl: use dt's irqflags for wakeup pin

FromJeffy Chen <jeffy.chen@rock-chips.com>
Date2017-01-23 05:30 +0100
Subject[PATCH v2 3/3] btmrvl: use dt's irqflags for wakeup pin
Message-ID<t2Equ-1HB-3@gated-at.bofh.it>
In reply to#1564659
Use irqflags parsed from dt.

Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
Reviewed-by: Brian Norris <briannorris@chromium.org>
---

Changes in v2: None

 drivers/bluetooth/btmrvl_sdio.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
index 796f719..23711fe 100644
--- a/drivers/bluetooth/btmrvl_sdio.c
+++ b/drivers/bluetooth/btmrvl_sdio.c
@@ -101,8 +101,7 @@ static int btmrvl_sdio_probe_of(struct device *dev,
 		} else {
 			ret = devm_request_irq(dev, cfg->irq_bt,
 					       btmrvl_wake_irq_bt,
-					       IRQF_TRIGGER_LOW,
-					       "bt_wake", cfg);
+					       0, "bt_wake", cfg);
 			if (ret) {
 				dev_err(dev,
 					"Failed to request irq_bt %d (%d)\n",
-- 
2.1.4

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web