Message ID | 20211117033807.185715-3-axboe@kernel.dk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add support for list issue | expand |
On Tue, Nov 16, 2021 at 08:38:05PM -0700, Jens Axboe wrote: > /** > * nvme_submit_cmd() - Copy a command into a queue and ring the doorbell > * @nvmeq: The queue to use > @@ -511,10 +520,7 @@ static void nvme_submit_cmd(struct nvme_queue *nvmeq, struct nvme_command *cmd, > bool write_sq) > { > spin_lock(&nvmeq->sq_lock); > - memcpy(nvmeq->sq_cmds + (nvmeq->sq_tail << nvmeq->sqes), > - cmd, sizeof(*cmd)); > - if (++nvmeq->sq_tail == nvmeq->q_depth) > - nvmeq->sq_tail = 0; > + nvme_copy_cmd(nvmeq, cmd); > nvme_write_sq_db(nvmeq, write_sq); > spin_unlock(&nvmeq->sq_lock); Given that nvme_submit_cmd only has two callers, I'd be tempted to just open code in the callers rather than creating a deep callchain here.
On 11/16/21 11:15 PM, Christoph Hellwig wrote: > On Tue, Nov 16, 2021 at 08:38:05PM -0700, Jens Axboe wrote: >> /** >> * nvme_submit_cmd() - Copy a command into a queue and ring the doorbell >> * @nvmeq: The queue to use >> @@ -511,10 +520,7 @@ static void nvme_submit_cmd(struct nvme_queue *nvmeq, struct nvme_command *cmd, >> bool write_sq) >> { >> spin_lock(&nvmeq->sq_lock); >> - memcpy(nvmeq->sq_cmds + (nvmeq->sq_tail << nvmeq->sqes), >> - cmd, sizeof(*cmd)); >> - if (++nvmeq->sq_tail == nvmeq->q_depth) >> - nvmeq->sq_tail = 0; >> + nvme_copy_cmd(nvmeq, cmd); >> nvme_write_sq_db(nvmeq, write_sq); >> spin_unlock(&nvmeq->sq_lock); > > Given that nvme_submit_cmd only has two callers, I'd be tempted to just > open code in the callers rather than creating a deep callchain here. It's inlined, but if you prefer duplicating the code, then I can just drop this patch.
On 11/16/21 19:38, Jens Axboe wrote: > External email: Use caution opening links or attachments > > > We'll need it for batched submit as well. > > Signed-off-by: Jens Axboe <axboe@kernel.dk> > --- maybe use nvme_sq_add_cmd() or nvme_sq_copy_cmd() instead of nvme_copy_cmd() makes is easier to grep XXX_sq_XXX(), either way looks good :- Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index c89f74ea00d4..c33cd1177b37 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -501,6 +501,15 @@ static inline void nvme_write_sq_db(struct nvme_queue *nvmeq, bool write_sq) nvmeq->last_sq_tail = nvmeq->sq_tail; } +static inline void nvme_copy_cmd(struct nvme_queue *nvmeq, + struct nvme_command *cmd) +{ + memcpy(nvmeq->sq_cmds + (nvmeq->sq_tail << nvmeq->sqes), cmd, + sizeof(*cmd)); + if (++nvmeq->sq_tail == nvmeq->q_depth) + nvmeq->sq_tail = 0; +} + /** * nvme_submit_cmd() - Copy a command into a queue and ring the doorbell * @nvmeq: The queue to use @@ -511,10 +520,7 @@ static void nvme_submit_cmd(struct nvme_queue *nvmeq, struct nvme_command *cmd, bool write_sq) { spin_lock(&nvmeq->sq_lock); - memcpy(nvmeq->sq_cmds + (nvmeq->sq_tail << nvmeq->sqes), - cmd, sizeof(*cmd)); - if (++nvmeq->sq_tail == nvmeq->q_depth) - nvmeq->sq_tail = 0; + nvme_copy_cmd(nvmeq, cmd); nvme_write_sq_db(nvmeq, write_sq); spin_unlock(&nvmeq->sq_lock); }
We'll need it for batched submit as well. Signed-off-by: Jens Axboe <axboe@kernel.dk> --- drivers/nvme/host/pci.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)