Skip to content

Commit 57d6ef4

Browse files
Bao D. Nguyenmartinkpetersen
authored andcommitted
scsi: ufs: mcq: Use ufshcd_mcq_poll_cqe_lock() in MCQ mode
In preparation for adding MCQ error handler support, update the MCQ code to use the ufshcd_mcq_poll_cqe_lock() in interrupt context instead of using ufshcd_mcq_poll_cqe_nolock(). This is to keep synchronization between MCQ interrupt and error handler contexts because both need to access the MCQ hardware in separate contexts. Signed-off-by: Bao D. Nguyen <[email protected]> Link: https://lore.kernel.org/r/6ae727ad2a4040469b8f0632b55e0577d80da11b.1685396241.git.quic_nguyenb@quicinc.com Reviewed-by: Bart Van Assche <[email protected]> Reviewed-by: Stanley Chu <[email protected]> Tested-by: Stanley Chu <[email protected]> Reviewed-by: Can Guo <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
1 parent f1304d4 commit 57d6ef4

File tree

5 files changed

+6
-8
lines changed

5 files changed

+6
-8
lines changed

drivers/ufs/core/ufs-mcq.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -284,8 +284,8 @@ static void ufshcd_mcq_process_cqe(struct ufs_hba *hba,
284284
ufshcd_compl_one_cqe(hba, tag, cqe);
285285
}
286286

287-
unsigned long ufshcd_mcq_poll_cqe_nolock(struct ufs_hba *hba,
288-
struct ufs_hw_queue *hwq)
287+
static unsigned long ufshcd_mcq_poll_cqe_nolock(struct ufs_hba *hba,
288+
struct ufs_hw_queue *hwq)
289289
{
290290
unsigned long completed_reqs = 0;
291291

@@ -301,7 +301,6 @@ unsigned long ufshcd_mcq_poll_cqe_nolock(struct ufs_hba *hba,
301301

302302
return completed_reqs;
303303
}
304-
EXPORT_SYMBOL_GPL(ufshcd_mcq_poll_cqe_nolock);
305304

306305
unsigned long ufshcd_mcq_poll_cqe_lock(struct ufs_hba *hba,
307306
struct ufs_hw_queue *hwq)
@@ -314,6 +313,7 @@ unsigned long ufshcd_mcq_poll_cqe_lock(struct ufs_hba *hba,
314313

315314
return completed_reqs;
316315
}
316+
EXPORT_SYMBOL_GPL(ufshcd_mcq_poll_cqe_lock);
317317

318318
void ufshcd_mcq_make_queues_operational(struct ufs_hba *hba)
319319
{

drivers/ufs/core/ufshcd-priv.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,6 @@ void ufshcd_mcq_config_mac(struct ufs_hba *hba, u32 max_active_cmds);
7171
void ufshcd_mcq_select_mcq_mode(struct ufs_hba *hba);
7272
u32 ufshcd_mcq_read_cqis(struct ufs_hba *hba, int i);
7373
void ufshcd_mcq_write_cqis(struct ufs_hba *hba, u32 val, int i);
74-
unsigned long ufshcd_mcq_poll_cqe_nolock(struct ufs_hba *hba,
75-
struct ufs_hw_queue *hwq);
7674
struct ufs_hw_queue *ufshcd_mcq_req_to_hwq(struct ufs_hba *hba,
7775
struct request *req);
7876
unsigned long ufshcd_mcq_poll_cqe_lock(struct ufs_hba *hba,

drivers/ufs/core/ufshcd.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6804,7 +6804,7 @@ static irqreturn_t ufshcd_handle_mcq_cq_events(struct ufs_hba *hba)
68046804
ufshcd_mcq_write_cqis(hba, events, i);
68056805

68066806
if (events & UFSHCD_MCQ_CQIS_TAIL_ENT_PUSH_STS)
6807-
ufshcd_mcq_poll_cqe_nolock(hba, hwq);
6807+
ufshcd_mcq_poll_cqe_lock(hba, hwq);
68086808
}
68096809

68106810
return IRQ_HANDLED;

drivers/ufs/host/ufs-qcom.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1556,7 +1556,7 @@ static irqreturn_t ufs_qcom_mcq_esi_handler(int irq, void *__hba)
15561556
struct ufs_hw_queue *hwq = &hba->uhq[id];
15571557

15581558
ufshcd_mcq_write_cqis(hba, 0x1, id);
1559-
ufshcd_mcq_poll_cqe_nolock(hba, hwq);
1559+
ufshcd_mcq_poll_cqe_lock(hba, hwq);
15601560

15611561
return IRQ_HANDLED;
15621562
}

include/ufs/ufshcd.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1243,7 +1243,7 @@ void ufshcd_update_evt_hist(struct ufs_hba *hba, u32 id, u32 val);
12431243
void ufshcd_hba_stop(struct ufs_hba *hba);
12441244
void ufshcd_schedule_eh_work(struct ufs_hba *hba);
12451245
void ufshcd_mcq_write_cqis(struct ufs_hba *hba, u32 val, int i);
1246-
unsigned long ufshcd_mcq_poll_cqe_nolock(struct ufs_hba *hba,
1246+
unsigned long ufshcd_mcq_poll_cqe_lock(struct ufs_hba *hba,
12471247
struct ufs_hw_queue *hwq);
12481248
void ufshcd_mcq_enable_esi(struct ufs_hba *hba);
12491249
void ufshcd_mcq_config_esi(struct ufs_hba *hba, struct msi_msg *msg);

0 commit comments

Comments
 (0)