Re: [PATCH 1/2] scsi: ufs: Add Multi-Circular Queue support

From: Can Guo
Date: Tue Jul 26 2022 - 02:26:48 EST


Hi Avri,

On 7/24/2022 12:32 PM, Avri Altman wrote:
+
+/**
+ * @ucdl_base_addr: UFS Command Descriptor base address
+ * @sqe_base_addr: submission queue entry base address
+ * @sqe_shadow_addr: submission queue entry shadow address
When you are editing your commit log, could you please also say something about the shadow queues concept?

Sure, we will add comments in next version.

And why it is a good idea to maintain 2 sets of addresses, which basically points to the same place?

When block layer chooses one task tag for one command, that tag will be used to link these pre-allocated data structs -

ucdl[tag]<->lrpb[tag]<->utrd[tag], and the tag chosen by block layer is random (it does not increase from 0 to n and goes

back to 0 in a circular way). But, in MCQ mode, when we submit the command to UFSHCI, we need to make sure the SQTP

get increased one slot by one slot (we cannot skip slots). Hence by keeping shadow utrds (or shadow SQEs), the data struct

linkage ucdl[tag]<->lrpb[tag]<->shadow_sqe[tag] remains same, and we copy the shadow sqe to the sqe[sq_tp_slot] only

when we finally decide the very sq_tp_slot used to submit this command in SQTP.

The benefit is that we can 100% leverage the existing initialization logic of lrbp in ufshcd_queuecommand path without changing a line.

Otherwise, considerable changes would be required to implement the idea of dynamical SQE assignment (to lrbp).


Thanks,

Can Guo.


Thanks,
Avri