|
Hannes Reinecke |
74b16a |
From: Alexey Dobriyan <adobriyan@gmail.com>
|
|
Hannes Reinecke |
74b16a |
Date: Fri, 28 Feb 2020 21:45:19 +0300
|
|
Hannes Reinecke |
74b16a |
Subject: [PATCH] nvme-pci: slimmer CQ head update
|
|
Hannes Reinecke |
74b16a |
Git-commit: e2a366a4b0feaeba8f0bf6091ddd2ac27507a9d3
|
|
Hannes Reinecke |
74b16a |
Patch-mainline: v5.7-rc1
|
|
Hannes Reinecke |
74b16a |
References: git-fixes
|
|
Hannes Reinecke |
74b16a |
|
|
Hannes Reinecke |
74b16a |
Update CQ head with pre-increment operator. This saves subtraction of 1
|
|
Hannes Reinecke |
74b16a |
and a few registers.
|
|
Hannes Reinecke |
74b16a |
|
|
Hannes Reinecke |
74b16a |
Also update phase with "^= 1". This generates only one RMW instruction.
|
|
Hannes Reinecke |
74b16a |
|
|
Hannes Reinecke |
74b16a |
ffffffff815ba150 <nvme_update_cq_head>:
|
|
Hannes Reinecke |
74b16a |
ffffffff815ba150: 0f b7 47 70 movzx eax,WORD PTR [rdi+0x70]
|
|
Hannes Reinecke |
74b16a |
ffffffff815ba154: 83 c0 01 add eax,0x1
|
|
Hannes Reinecke |
74b16a |
ffffffff815ba157: 66 89 47 70 mov WORD PTR [rdi+0x70],ax
|
|
Hannes Reinecke |
74b16a |
ffffffff815ba15b: 66 3b 47 68 cmp ax,WORD PTR [rdi+0x68]
|
|
Hannes Reinecke |
74b16a |
ffffffff815ba15f: 74 01 je ffffffff815ba162 <nvme_update_cq_head+0x12>
|
|
Hannes Reinecke |
74b16a |
ffffffff815ba161: c3 ret
|
|
Hannes Reinecke |
74b16a |
ffffffff815ba162: 31 c0 xor eax,eax
|
|
Hannes Reinecke |
74b16a |
ffffffff815ba164: 80 77 74 01 ===> xor BYTE PTR [rdi+0x74],0x1
|
|
Hannes Reinecke |
74b16a |
ffffffff815ba168: 66 89 47 70 mov WORD PTR [rdi+0x70],ax
|
|
Hannes Reinecke |
74b16a |
ffffffff815ba16c: c3 ret
|
|
Hannes Reinecke |
74b16a |
|
|
Hannes Reinecke |
74b16a |
add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-119 (-119)
|
|
Hannes Reinecke |
74b16a |
Function old new delta
|
|
Hannes Reinecke |
74b16a |
nvme_poll 690 678 -12
|
|
Hannes Reinecke |
74b16a |
nvme_dev_disable 1230 1177 -53
|
|
Hannes Reinecke |
74b16a |
nvme_irq 613 559 -54
|
|
Hannes Reinecke |
74b16a |
|
|
Hannes Reinecke |
74b16a |
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
|
|
Hannes Reinecke |
74b16a |
Acked-by: Hannes Reinecke <hare@suse.com>
|
|
Hannes Reinecke |
74b16a |
---
|
|
Hannes Reinecke |
74b16a |
drivers/nvme/host/pci.c | 6 ++----
|
|
Hannes Reinecke |
74b16a |
1 file changed, 2 insertions(+), 4 deletions(-)
|
|
Hannes Reinecke |
74b16a |
|
|
Hannes Reinecke |
74b16a |
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
|
|
Hannes Reinecke |
74b16a |
index d3f23d6254e4..cdc9b6149d38 100644
|
|
Hannes Reinecke |
74b16a |
--- a/drivers/nvme/host/pci.c
|
|
Hannes Reinecke |
74b16a |
+++ b/drivers/nvme/host/pci.c
|
|
Hannes Reinecke |
74b16a |
@@ -982,11 +982,9 @@ static void nvme_complete_cqes(struct nvme_queue *nvmeq, u16 start, u16 end)
|
|
Hannes Reinecke |
74b16a |
|
|
Hannes Reinecke |
74b16a |
static inline void nvme_update_cq_head(struct nvme_queue *nvmeq)
|
|
Hannes Reinecke |
74b16a |
{
|
|
Hannes Reinecke |
74b16a |
- if (nvmeq->cq_head == nvmeq->q_depth - 1) {
|
|
Hannes Reinecke |
74b16a |
+ if (++nvmeq->cq_head == nvmeq->q_depth) {
|
|
Hannes Reinecke |
74b16a |
nvmeq->cq_head = 0;
|
|
Hannes Reinecke |
74b16a |
- nvmeq->cq_phase = !nvmeq->cq_phase;
|
|
Hannes Reinecke |
74b16a |
- } else {
|
|
Hannes Reinecke |
74b16a |
- nvmeq->cq_head++;
|
|
Hannes Reinecke |
74b16a |
+ nvmeq->cq_phase ^= 1;
|
|
Hannes Reinecke |
74b16a |
}
|
|
Hannes Reinecke |
74b16a |
}
|
|
Hannes Reinecke |
74b16a |
|
|
Hannes Reinecke |
74b16a |
--
|
|
Hannes Reinecke |
74b16a |
2.29.2
|
|
Hannes Reinecke |
74b16a |
|