From: Amitkumar Karwar <amitkarwar@gmail.com>
To: Kalle Valo <kvalo@codeaurora.org>
Cc: linux-wireless@vger.kernel.org,
Amitkumar Karwar <amit.karwar@redpinesignals.com>,
Prameela Rani Garnepudi <prameela.j04cs@gmail.com>,
Karun Eagalapati <karun256@gmail.com>
Subject: [v3 18/21] rsi: Optimise sdio claim and release host
Date: Thu, 6 Jul 2017 20:07:21 +0530 [thread overview]
Message-ID: <1499351844-2046-19-git-send-email-amitkarwar@gmail.com> (raw)
In-Reply-To: <1499351844-2046-1-git-send-email-amitkarwar@gmail.com>
From: Karun Eagalapati <karun256@gmail.com>
SDIO host is already claimed in our interrupt handler. Some lower
level APIs claims host while performing SDIO read or write operations.
Let's use sdio_irq_task variable to check if we are in interrupt
context and claim/release the host accordingly.
Signed-off-by: Karun Eagalapati <karun256@gmail.com>
Signed-off-by: Amitkumar Karwar <amit.karwar@redpinesignals.com>
Signed-off-by: Prameela Rani Garnepudi <prameela.j04cs@gmail.com>
---
drivers/net/wireless/rsi/rsi_91x_sdio.c | 31 +++++++++++++++++++++----------
1 file changed, 21 insertions(+), 10 deletions(-)
diff --git a/drivers/net/wireless/rsi/rsi_91x_sdio.c b/drivers/net/wireless/rsi/rsi_91x_sdio.c
index f1ba8ac..42d558b 100644
--- a/drivers/net/wireless/rsi/rsi_91x_sdio.c
+++ b/drivers/net/wireless/rsi/rsi_91x_sdio.c
@@ -138,12 +138,15 @@ static int rsi_issue_sdiocommand(struct sdio_func *func,
static void rsi_handle_interrupt(struct sdio_func *function)
{
struct rsi_hw *adapter = sdio_get_drvdata(function);
+ struct rsi_91x_sdiodev *dev =
+ (struct rsi_91x_sdiodev *)adapter->rsi_dev;
if (adapter->priv->fsm_state == FSM_FW_NOT_LOADED)
return;
- sdio_release_host(function);
+
+ dev->sdio_irq_task = current;
rsi_interrupt_handler(adapter);
- sdio_claim_host(function);
+ dev->sdio_irq_task = NULL;
}
/**
@@ -407,14 +410,16 @@ int rsi_sdio_read_register(struct rsi_hw *adapter,
u8 fun_num = 0;
int status;
- sdio_claim_host(dev->pfunction);
+ if (likely(dev->sdio_irq_task != current))
+ sdio_claim_host(dev->pfunction);
if (fun_num == 0)
*data = sdio_f0_readb(dev->pfunction, addr, &status);
else
*data = sdio_readb(dev->pfunction, addr, &status);
- sdio_release_host(dev->pfunction);
+ if (likely(dev->sdio_irq_task != current))
+ sdio_release_host(dev->pfunction);
return status;
}
@@ -438,14 +443,16 @@ int rsi_sdio_write_register(struct rsi_hw *adapter,
(struct rsi_91x_sdiodev *)adapter->rsi_dev;
int status = 0;
- sdio_claim_host(dev->pfunction);
+ if (likely(dev->sdio_irq_task != current))
+ sdio_claim_host(dev->pfunction);
if (function == 0)
sdio_f0_writeb(dev->pfunction, *data, addr, &status);
else
sdio_writeb(dev->pfunction, *data, addr, &status);
- sdio_release_host(dev->pfunction);
+ if (likely(dev->sdio_irq_task != current))
+ sdio_release_host(dev->pfunction);
return status;
}
@@ -490,11 +497,13 @@ static int rsi_sdio_read_register_multiple(struct rsi_hw *adapter,
(struct rsi_91x_sdiodev *)adapter->rsi_dev;
u32 status;
- sdio_claim_host(dev->pfunction);
+ if (likely(dev->sdio_irq_task != current))
+ sdio_claim_host(dev->pfunction);
status = sdio_readsb(dev->pfunction, data, addr, count);
- sdio_release_host(dev->pfunction);
+ if (likely(dev->sdio_irq_task != current))
+ sdio_release_host(dev->pfunction);
if (status != 0)
rsi_dbg(ERR_ZONE, "%s: Synch Cmd53 read failed\n", __func__);
@@ -532,11 +541,13 @@ int rsi_sdio_write_register_multiple(struct rsi_hw *adapter,
dev->write_fail++;
}
- sdio_claim_host(dev->pfunction);
+ if (likely(dev->sdio_irq_task != current))
+ sdio_claim_host(dev->pfunction);
status = sdio_writesb(dev->pfunction, addr, data, count);
- sdio_release_host(dev->pfunction);
+ if (likely(dev->sdio_irq_task != current))
+ sdio_release_host(dev->pfunction);
if (status) {
rsi_dbg(ERR_ZONE, "%s: Synch Cmd53 write failed %d\n",
--
2.7.4
next prev parent reply other threads:[~2017-07-06 14:43 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-06 14:37 [v3 00/21] rsi driver enhancements Amitkumar Karwar
2017-07-06 14:37 ` [v3 01/21] rsi: use BUILD_BUG_ON check for fsm_state Amitkumar Karwar
2017-07-28 14:24 ` [v3,01/21] " Kalle Valo
2017-07-06 14:37 ` [v3 02/21] rsi: changes in eeprom read frame Amitkumar Karwar
2017-07-06 14:37 ` [v3 03/21] rsi: fix sdio card reset problem Amitkumar Karwar
2017-07-06 14:37 ` [v3 04/21] rsi: chip reset for SDIO interface Amitkumar Karwar
2017-07-06 14:37 ` [v3 05/21] rsi: correct SDIO disconnect path handling Amitkumar Karwar
2017-07-06 14:37 ` [v3 06/21] rsi: card reset for USB interface Amitkumar Karwar
2017-07-06 14:37 ` [v3 07/21] rsi: USB tx headroom cleanup Amitkumar Karwar
2017-07-06 14:37 ` [v3 08/21] rsi: correct the logic of deriving queue number Amitkumar Karwar
2017-07-06 14:37 ` [v3 09/21] rsi: rename USB endpoint macros Amitkumar Karwar
2017-07-06 14:37 ` [v3 10/21] rsi: choose correct endpoint based on queue Amitkumar Karwar
2017-07-06 14:37 ` [v3 11/21] rsi: set immediate wakeup bit Amitkumar Karwar
2017-07-06 14:37 ` [v3 12/21] rsi: management frame descriptor preparation cleanup Amitkumar Karwar
2017-07-06 14:37 ` [v3 13/21] rsi: separate function for management packet descriptor Amitkumar Karwar
2017-07-06 14:37 ` [v3 14/21] rsi: data packet descriptor code cleanup Amitkumar Karwar
2017-07-06 14:37 ` [v3 15/21] rsi: data packet descriptor enhancements Amitkumar Karwar
2017-07-06 14:37 ` [v3 16/21] rsi: separate function for data packet descriptor Amitkumar Karwar
2017-07-06 14:37 ` [v3 17/21] rsi: rename variable in_sdio_litefi_irq Amitkumar Karwar
2017-07-06 14:37 ` Amitkumar Karwar [this message]
2017-07-06 14:37 ` [v3 19/21] rsi: SDIO Rx packet processing enhancement Amitkumar Karwar
2017-07-06 14:37 ` [v3 20/21] rsi: use separate mutex lock for receive thread Amitkumar Karwar
2017-07-06 14:37 ` [v3 21/21] rsi: Rename mutex tx_rxlock to the tx_lock Amitkumar Karwar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1499351844-2046-19-git-send-email-amitkarwar@gmail.com \
--to=amitkarwar@gmail.com \
--cc=amit.karwar@redpinesignals.com \
--cc=karun256@gmail.com \
--cc=kvalo@codeaurora.org \
--cc=linux-wireless@vger.kernel.org \
--cc=prameela.j04cs@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).