From: Anup Patel <apatel@ventanamicro.com>
To: opensbi@lists.infradead.org
Subject: [PATCH 3/6] lib: sbi: Optimize fifo enqueue/dequeue for basic data types
Date: Fri, 5 Jul 2024 12:45:01 +0530 [thread overview]
Message-ID: <20240705071504.50988-4-apatel@ventanamicro.com> (raw)
In-Reply-To: <20240705071504.50988-1-apatel@ventanamicro.com>
Don't use sbi_memcpy() for basic data types in fifo enqueue/dequeue
instead use direct type-cast and assignment.
Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
lib/sbi/sbi_fifo.c | 43 ++++++++++++++++++++++++++++++++++++++++---
1 file changed, 40 insertions(+), 3 deletions(-)
diff --git a/lib/sbi/sbi_fifo.c b/lib/sbi/sbi_fifo.c
index 72c6d39..9199a30 100644
--- a/lib/sbi/sbi_fifo.c
+++ b/lib/sbi/sbi_fifo.c
@@ -66,7 +66,26 @@ static inline void __sbi_fifo_enqueue(struct sbi_fifo *fifo, void *data)
if (head >= fifo->num_entries)
head = head - fifo->num_entries;
- sbi_memcpy((char *)fifo->queue + head * fifo->entry_size, data, fifo->entry_size);
+ switch (fifo->entry_size) {
+ case 1:
+ *(char *)(fifo->queue + head * fifo->entry_size) = *(char *)data;
+ break;
+ case 2:
+ *(u16 *)(fifo->queue + head * fifo->entry_size) = *(u16 *)data;
+ break;
+ case 4:
+ *(u32 *)(fifo->queue + head * fifo->entry_size) = *(u32 *)data;
+ break;
+#if __riscv_xlen > 32
+ case 8:
+ *(u64 *)(fifo->queue + head * fifo->entry_size) = *(u64 *)data;
+ break;
+#endif
+ default:
+ sbi_memcpy(fifo->queue + head * fifo->entry_size,
+ data, fifo->entry_size);
+ break;
+ }
fifo->avail++;
}
@@ -184,8 +203,26 @@ int sbi_fifo_dequeue(struct sbi_fifo *fifo, void *data)
return SBI_ENOENT;
}
- sbi_memcpy(data, (char *)fifo->queue + (u32)fifo->tail * fifo->entry_size,
- fifo->entry_size);
+ switch (fifo->entry_size) {
+ case 1:
+ *(char *)data = *(char *)(fifo->queue + (u32)fifo->tail * fifo->entry_size);
+ break;
+ case 2:
+ *(u16 *)data = *(u16 *)(fifo->queue + (u32)fifo->tail * fifo->entry_size);
+ break;
+ case 4:
+ *(u32 *)data = *(u32 *)(fifo->queue + (u32)fifo->tail * fifo->entry_size);
+ break;
+#if __riscv_xlen > 32
+ case 8:
+ *(u64 *)data = *(u64 *)(fifo->queue + (u32)fifo->tail * fifo->entry_size);
+ break;
+#endif
+ default:
+ sbi_memcpy(data, fifo->queue + (u32)fifo->tail * fifo->entry_size,
+ fifo->entry_size);
+ break;
+ }
fifo->avail--;
fifo->tail++;
--
2.34.1
next prev parent reply other threads:[~2024-07-05 7:15 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-05 7:14 [PATCH 0/6] Early console buffer for OpenSBI Anup Patel
2024-07-05 7:14 ` [PATCH 1/6] platform: Setup serial console device in early_init() Anup Patel
2024-07-24 5:40 ` Himanshu Chauhan
2024-07-05 7:15 ` [PATCH 2/6] lib: sbi: Remove sbi_console_init() and console_init() platform callback Anup Patel
2024-07-24 5:40 ` Himanshu Chauhan
2024-07-05 7:15 ` Anup Patel [this message]
2024-07-24 5:37 ` [PATCH 3/6] lib: sbi: Optimize fifo enqueue/dequeue for basic data types Himanshu Chauhan
2024-07-05 7:15 ` [PATCH 4/6] lib: sbi: Allow forceful queueing of data in sbi_fifo_enqueue() Anup Patel
2024-07-24 5:38 ` Himanshu Chauhan
2024-07-05 7:15 ` [PATCH 5/6] include: sbi: Add macros to create FIFO as local or global variable Anup Patel
2024-07-24 5:38 ` Himanshu Chauhan
2024-07-05 7:15 ` [PATCH 6/6] lib: sbi: Introduce an early console buffer for caching early prints Anup Patel
2024-07-24 5:39 ` Himanshu Chauhan
2024-07-08 16:48 ` [PATCH 0/6] Early console buffer for OpenSBI Xiang W
2024-07-09 3:43 ` Anup Patel
2024-07-24 6:50 ` Anup Patel
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=20240705071504.50988-4-apatel@ventanamicro.com \
--to=apatel@ventanamicro.com \
--cc=opensbi@lists.infradead.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.