Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12:Update
xen.787
548e9c0d-console-allocate-ring-buffer-earlier.p...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 548e9c0d-console-allocate-ring-buffer-earlier.patch of Package xen.787
# Commit 2676bc915157ab474ee478d929b0928cf696b385 # Date 2014-12-15 09:30:05 +0100 # Author Jan Beulich <jbeulich@suse.com> # Committer Jan Beulich <jbeulich@suse.com> console: allocate ring buffer earlier ... when "conring_size=" was specified on the command line. We can't really do this as early as we would want to when the option was not specified, as the default depends on knowing the system CPU count. Yet the parsing of the ACPI tables is one of the things that generates a lot of output especially on large systems. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> (ARM and generic bits) --- a/xen/arch/arm/setup.c +++ b/xen/arch/arm/setup.c @@ -684,6 +684,7 @@ void __init start_xen(unsigned long boot dt_uart_init(); console_init_preirq(); + console_init_ring(); system_state = SYS_STATE_boot; --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -1188,6 +1188,7 @@ void __init __start_xen(unsigned long mb } vm_init(); + console_init_ring(); vesa_init(); softirq_init(); --- a/xen/drivers/char/console.c +++ b/xen/drivers/char/console.c @@ -684,15 +684,14 @@ void __init console_init_preirq(void) } } -void __init console_init_postirq(void) +void __init console_init_ring(void) { char *ring; unsigned int i, order, memflags; - - serial_init_postirq(); + unsigned long flags; if ( !opt_conring_size ) - opt_conring_size = num_present_cpus() << (9 + xenlog_lower_thresh); + return; order = get_order_from_bytes(max(opt_conring_size, conring_size)); memflags = MEMF_bits(crashinfo_maxaddr_bits); @@ -703,17 +702,30 @@ void __init console_init_postirq(void) } opt_conring_size = PAGE_SIZE << order; - spin_lock_irq(&console_lock); + spin_lock_irqsave(&console_lock, flags); for ( i = conringc ; i != conringp; i++ ) ring[i & (opt_conring_size - 1)] = conring[i & (conring_size - 1)]; conring = ring; smp_wmb(); /* Allow users of console_force_unlock() to see larger buffer. */ conring_size = opt_conring_size; - spin_unlock_irq(&console_lock); + spin_unlock_irqrestore(&console_lock, flags); printk("Allocated console ring of %u KiB.\n", opt_conring_size >> 10); } +void __init console_init_postirq(void) +{ + serial_init_postirq(); + + if ( conring != _conring ) + return; + + if ( !opt_conring_size ) + opt_conring_size = num_present_cpus() << (9 + xenlog_lower_thresh); + + console_init_ring(); +} + void __init console_endboot(void) { int i, j; --- a/xen/include/xen/console.h +++ b/xen/include/xen/console.h @@ -14,6 +14,7 @@ struct xen_sysctl_readconsole; long read_console_ring(struct xen_sysctl_readconsole *op); void console_init_preirq(void); +void console_init_ring(void); void console_init_postirq(void); void console_endboot(void); int console_has(const char *device);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor