[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen master] 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#master



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.