* [PATCH] mt76: mt7921s: fix possible sdio deadlock in command fail
@ 2022-06-12 1:59 Deren Wu
2022-06-13 9:31 ` Lorenzo Bianconi
2022-06-13 12:21 ` Lorenzo Bianconi
0 siblings, 2 replies; 4+ messages in thread
From: Deren Wu @ 2022-06-12 1:59 UTC (permalink / raw)
To: Felix Fietkau, Lorenzo Bianconi
Cc: Sean Wang, Soul Huang, YN Chen, Leon Yen, Eric-SY Chang, Deren Wu,
KM Lin, Robin Chiu, CH Yeh, Posh Sun, Eric Liang, Stella Chang,
Evelyn Tsai, Ryder Lee, Shayne Chen, linux-wireless,
linux-mediatek, Deren Wu
From: Deren Wu <deren.wu@mediatek.com>
Move sdio_release_host() to final resource handing
Fixes: b12deb5e86fa ("mt76: mt7921s: fix mt7921s_mcu_[fw|drv]_pmctrl")
Reported-by: YN Chen <YN.Chen@mediatek.com>
Signed-off-by: Deren Wu <deren.wu@mediatek.com>
---
drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c
index 54a5c712a3c3..1856d677fff4 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c
@@ -156,9 +156,9 @@ int mt7921s_mcu_fw_pmctrl(struct mt7921_dev *dev)
err = readx_poll_timeout(mt76s_read_pcr, &dev->mt76, status,
!(status & WHLPCR_IS_DRIVER_OWN), 2000, 1000000);
+err:
sdio_release_host(func);
-err:
if (err < 0) {
dev_err(dev->mt76.dev, "firmware own failed\n");
clear_bit(MT76_STATE_PM, &mphy->state);
--
2.18.0
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH] mt76: mt7921s: fix possible sdio deadlock in command fail 2022-06-12 1:59 [PATCH] mt76: mt7921s: fix possible sdio deadlock in command fail Deren Wu @ 2022-06-13 9:31 ` Lorenzo Bianconi 2022-06-13 12:21 ` Lorenzo Bianconi 1 sibling, 0 replies; 4+ messages in thread From: Lorenzo Bianconi @ 2022-06-13 9:31 UTC (permalink / raw) To: Deren Wu Cc: Felix Fietkau, Sean Wang, Soul Huang, YN Chen, Leon Yen, Eric-SY Chang, KM Lin, Robin Chiu, CH Yeh, Posh Sun, Eric Liang, Stella Chang, Evelyn Tsai, Ryder Lee, Shayne Chen, linux-wireless, linux-mediatek [-- Attachment #1: Type: text/plain, Size: 1143 bytes --] > From: Deren Wu <deren.wu@mediatek.com> > > Move sdio_release_host() to final resource handing > Acked-by: Lorenzo Bianconi <lorenzo@kernel.org> > Fixes: b12deb5e86fa ("mt76: mt7921s: fix mt7921s_mcu_[fw|drv]_pmctrl") > Reported-by: YN Chen <YN.Chen@mediatek.com> > Signed-off-by: Deren Wu <deren.wu@mediatek.com> > --- > drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c > index 54a5c712a3c3..1856d677fff4 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c > @@ -156,9 +156,9 @@ int mt7921s_mcu_fw_pmctrl(struct mt7921_dev *dev) > > err = readx_poll_timeout(mt76s_read_pcr, &dev->mt76, status, > !(status & WHLPCR_IS_DRIVER_OWN), 2000, 1000000); > +err: > sdio_release_host(func); > > -err: > if (err < 0) { > dev_err(dev->mt76.dev, "firmware own failed\n"); > clear_bit(MT76_STATE_PM, &mphy->state); > -- > 2.18.0 > [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] mt76: mt7921s: fix possible sdio deadlock in command fail 2022-06-12 1:59 [PATCH] mt76: mt7921s: fix possible sdio deadlock in command fail Deren Wu 2022-06-13 9:31 ` Lorenzo Bianconi @ 2022-06-13 12:21 ` Lorenzo Bianconi 2022-06-13 15:32 ` Deren Wu 1 sibling, 1 reply; 4+ messages in thread From: Lorenzo Bianconi @ 2022-06-13 12:21 UTC (permalink / raw) To: Deren Wu Cc: Felix Fietkau, Sean Wang, Soul Huang, YN Chen, Leon Yen, Eric-SY Chang, KM Lin, Robin Chiu, CH Yeh, Posh Sun, Eric Liang, Stella Chang, Evelyn Tsai, Ryder Lee, Shayne Chen, linux-wireless, linux-mediatek [-- Attachment #1: Type: text/plain, Size: 2406 bytes --] > From: Deren Wu <deren.wu@mediatek.com> > > Move sdio_release_host() to final resource handing > > Fixes: b12deb5e86fa ("mt76: mt7921s: fix mt7921s_mcu_[fw|drv]_pmctrl") > Reported-by: YN Chen <YN.Chen@mediatek.com> > Signed-off-by: Deren Wu <deren.wu@mediatek.com> > --- > drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c > index 54a5c712a3c3..1856d677fff4 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c > @@ -156,9 +156,9 @@ int mt7921s_mcu_fw_pmctrl(struct mt7921_dev *dev) > > err = readx_poll_timeout(mt76s_read_pcr, &dev->mt76, status, > !(status & WHLPCR_IS_DRIVER_OWN), 2000, 1000000); > +err: > sdio_release_host(func); > > -err: > if (err < 0) { > dev_err(dev->mt76.dev, "firmware own failed\n"); > clear_bit(MT76_STATE_PM, &mphy->state); > -- > 2.18.0 > Hi Deren, in order to align the code with mt7921e, can you please fold the following changes into this patch? Regards, Lorenzo --- a/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c @@ -135,8 +135,8 @@ int mt7921s_mcu_fw_pmctrl(struct mt7921_dev *dev) struct sdio_func *func = dev->mt76.sdio.func; struct mt76_phy *mphy = &dev->mt76.phy; struct mt76_connac_pm *pm = &dev->pm; - int err = 0; u32 status; + int err; sdio_claim_host(func); @@ -147,7 +147,7 @@ int mt7921s_mcu_fw_pmctrl(struct mt7921_dev *dev) 2000, 1000000); if (err < 0) { dev_err(dev->mt76.dev, "mailbox ACK not cleared\n"); - goto err; + goto out; } } @@ -155,18 +155,18 @@ int mt7921s_mcu_fw_pmctrl(struct mt7921_dev *dev) err = readx_poll_timeout(mt76s_read_pcr, &dev->mt76, status, !(status & WHLPCR_IS_DRIVER_OWN), 2000, 1000000); -err: +out: sdio_release_host(func); if (err < 0) { dev_err(dev->mt76.dev, "firmware own failed\n"); clear_bit(MT76_STATE_PM, &mphy->state); - err = -EIO; + return -EIO; } pm->stats.last_doze_event = jiffies; pm->stats.awake_time += pm->stats.last_doze_event - pm->stats.last_wake_event; - return err; + return 0; } [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] mt76: mt7921s: fix possible sdio deadlock in command fail 2022-06-13 12:21 ` Lorenzo Bianconi @ 2022-06-13 15:32 ` Deren Wu 0 siblings, 0 replies; 4+ messages in thread From: Deren Wu @ 2022-06-13 15:32 UTC (permalink / raw) To: Lorenzo Bianconi Cc: Felix Fietkau, Sean Wang, Soul Huang, YN Chen, Leon Yen, Eric-SY Chang, KM Lin, Robin Chiu, CH Yeh, Posh Sun, Eric Liang, Stella Chang, Evelyn Tsai, Ryder Lee, Shayne Chen, linux-wireless, linux-mediatek On Mon, 2022-06-13 at 14:21 +0200, Lorenzo Bianconi wrote: > > From: Deren Wu <deren.wu@mediatek.com> > > > > Move sdio_release_host() to final resource handing > > > > Fixes: b12deb5e86fa ("mt76: mt7921s: fix > > mt7921s_mcu_[fw|drv]_pmctrl") > > Reported-by: YN Chen <YN.Chen@mediatek.com> > > Signed-off-by: Deren Wu <deren.wu@mediatek.com> > > --- > > drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c > > b/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c > > index 54a5c712a3c3..1856d677fff4 100644 > > --- a/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c > > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c > > @@ -156,9 +156,9 @@ int mt7921s_mcu_fw_pmctrl(struct mt7921_dev > > *dev) > > > > err = readx_poll_timeout(mt76s_read_pcr, &dev->mt76, status, > > !(status & WHLPCR_IS_DRIVER_OWN), > > 2000, 1000000); > > +err: > > sdio_release_host(func); > > > > -err: > > if (err < 0) { > > dev_err(dev->mt76.dev, "firmware own failed\n"); > > clear_bit(MT76_STATE_PM, &mphy->state); > > -- > > 2.18.0 > > > > Hi Deren, > > in order to align the code with mt7921e, can you please fold the > following > changes into this patch? > > Regards, > Lorenzo > Hi Lore, Sure, I will post v2 with your patch. Thanks, Deren > --- a/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c > @@ -135,8 +135,8 @@ int mt7921s_mcu_fw_pmctrl(struct mt7921_dev *dev) > struct sdio_func *func = dev->mt76.sdio.func; > struct mt76_phy *mphy = &dev->mt76.phy; > struct mt76_connac_pm *pm = &dev->pm; > - int err = 0; > u32 status; > + int err; > > sdio_claim_host(func); > > @@ -147,7 +147,7 @@ int mt7921s_mcu_fw_pmctrl(struct mt7921_dev *dev) > 2000, 1000000); > if (err < 0) { > dev_err(dev->mt76.dev, "mailbox ACK not > cleared\n"); > - goto err; > + goto out; > } > } > > @@ -155,18 +155,18 @@ int mt7921s_mcu_fw_pmctrl(struct mt7921_dev > *dev) > > err = readx_poll_timeout(mt76s_read_pcr, &dev->mt76, status, > !(status & WHLPCR_IS_DRIVER_OWN), > 2000, 1000000); > -err: > +out: > sdio_release_host(func); > > if (err < 0) { > dev_err(dev->mt76.dev, "firmware own failed\n"); > clear_bit(MT76_STATE_PM, &mphy->state); > - err = -EIO; > + return -EIO; > } > > pm->stats.last_doze_event = jiffies; > pm->stats.awake_time += pm->stats.last_doze_event - > pm->stats.last_wake_event; > > - return err; > + return 0; > } > _______________________________________________ > Linux-mediatek mailing list > Linux-mediatek@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-06-13 18:39 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-06-12 1:59 [PATCH] mt76: mt7921s: fix possible sdio deadlock in command fail Deren Wu 2022-06-13 9:31 ` Lorenzo Bianconi 2022-06-13 12:21 ` Lorenzo Bianconi 2022-06-13 15:32 ` Deren Wu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).