|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] xen/console: use memcpy() in console_init_ring()
commit a7fd7d4cbd5e793d31d61c25e08526b330edd7f8
Author: Denis Mukhin <dmukhin@xxxxxxxx>
AuthorDate: Thu Jul 16 09:18:43 2026 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Thu Jul 16 09:18:43 2026 +0200
xen/console: use memcpy() in console_init_ring()
Make console_init_ring() more efficient by using memcpy()'s, rather than
copying the ring a byte at a time.
No functional change intended.
Suggested-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Signed-off-by: Denis Mukhin <dmukhin@xxxxxxxx>
Acked-by: Roger Pau Monne <roger.pau@xxxxxxxxxx>
---
xen/drivers/char/console.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c
index 5ebbbf63c0..37ea844031 100644
--- a/xen/drivers/char/console.c
+++ b/xen/drivers/char/console.c
@@ -463,7 +463,8 @@ static void cf_check conring_dump_keyhandler(unsigned char
key)
void __init console_init_ring(void)
{
char *ring;
- unsigned int i, order, memflags;
+ XENCONS_RING_IDX done, size, n;
+ unsigned int order, memflags;
unsigned long flags;
if ( !opt_conring_size )
@@ -479,8 +480,19 @@ void __init console_init_ring(void)
opt_conring_size = PAGE_SIZE << order;
nrspin_lock_irqsave(&console_lock, flags);
- for ( i = conringc ; i != conringp; i++ )
- ring[i & (opt_conring_size - 1)] = conring[i & (conring_size - 1)];
+
+ size = conringp - conringc;
+ for ( done = 0; done < size; done += n )
+ {
+ XENCONS_RING_IDX src = (conringc + done) & (conring_size - 1);
+ XENCONS_RING_IDX dst = (conringc + done) & (opt_conring_size - 1);
+
+ n = min(opt_conring_size - dst, conring_size - src);
+ n = min(size - done, n);
+
+ memcpy(&ring[dst], &conring[src], n);
+ }
+
conring = ring;
smp_wmb(); /* Allow users of console_force_unlock() to see larger buffer.
*/
conring_size = opt_conring_size;
--
generated by git-patchbot for /home/xen/git/xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |