mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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@citrix.com> Signed-off-by: Denis Mukhin <dmukhin@ford.com> Acked-by: Roger Pau Monne <roger.pau@citrix.com>
This commit is contained in:
1 parent
185847d0b6
commit
a7fd7d4cbd
1 file changed
+15
-3
@@ -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;
|
||||
|
||||